sql 语句exists,group,order的简单用法

1.有表user和数据以下:
+------+------+
| id   | name |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | B    |
|    4 | A    |
|    5 | C    |
|    6 | C    |
+------+------+
要求当Name列上有相同的值时,只保留最小的那一行,结果以下:
+---------+------+
| min(id) | name |
+---------+------+
|       1 | A    |
|       2 | B    |
|       5 | C    |
+---------+------+
写出用以实现上述要求的一条sql语句:
答案:select min(id),name from user group by name;
若是要保留最大的那一行,并按id的大小排列,结果以下:
+---------+------+
| max(id) | name |
+---------+------+
|       3 | B    |
|       4 | A    |
|       6 | C    |
+---------+------+
答案:select max(id),name from user group by name order by max(id);
2.aa,bb 表都有20个字段,且记录量都很大,aa,bb表的X字段(非空)上有索引,请用sql列出aa表里存在的X在bb表不存在的X的值,
请写出你认为最快的语句,并解释缘由。
答案以下:
1:创建表A
create table A(id integer primary key auto_increment, name varchar(20));
2:创建表B
 create table B(id integer primary key auto_increment, AID integer, name varchar(20), foreign key (AID) references  A(id));
3: A,B表以下:
+----+------+
| id | name |
+----+------+
|  1 | A1   |
|  2 | A2   |
|  3 | A3   |
+----+------+
+----+------+------+
| id | AID  | name |
+----+------+------+
|  1 |    1 | B1   |
|  2 |    2 | B2   |
|  3 |    2 | B3   |
+----+------+------+
4:用exists
select id,name from A where exists (select * from B where A.id=B.AID);
+----+------+
| id | name |
+----+------+
|  1 | A1   |
|  2 | A2   |
+----+------+
5:用 in
select id,name from A where id in (select AID from B );
+----+------+
| id | name |
+----+------+
|  1 | A1   |
|  2 | A2   |
+----+------+

sql

相关文章
相关标签/搜索