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

相關文章
相關標籤/搜索