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