查询的整体语法:select 字段列表 from 库名.表名select 字段列表 from 库名.表名 where 条件表达式


注:group by 分组 having 对分组进行过滤 order by 排序 asc 升序 desc 降序

1、查询年龄大于21岁的员工:

SELECT * from 表名 where 字段 > 21;

2、查询年龄不等于21岁的员工:

SELECT * from 表名 where 字段 != 21;


查询满足条件记录,in ()

3、查询年龄是18岁的和21岁的:

SELECT * from 表名 where 字段 in(18,21);


查询不满足条件以外记录,not in ()

4、以字段(f_name) 进行排序:

SELECT * from 表名 where s_id in (101,102) order by f_name;

5查询所有s_id不等于101也不等于102的记录:

SELECT * from 表名 where s_id not in (101,102);


带BETWEEN AND的范围查询

6、and 在什么什么范围之间的:

SELECT * from 表名 where 字段 between 18 and 23;

7、查询在 某记录 与 某记录 之外 的记录:

SELECT * from 表名 where 字段 not between 18 and 23;


模糊查询

8、查询f_name中包含字母'g'的记录:

SELECT * from 表名 where f_name like '%g%';

9、查询以'b'开头,并以'y'结尾的水果的名称:

SELECT * from 表名 where f_name like 'b%y';

10、查询以字母'y'结尾,且'y'前面只有4个字母的记录:

SELECT * from 表名 where f_name like '____y';


查询为空记录

11、查询表中字段(c_email)为空的记录

SELECT * from 表名 where c_email is null;


查询不为空记录

12、查询表中字段(c_email)不为空的记录:

SELECT * from 表名 where c_email is not null;


带AND的多条件查询


13、查询s_id = 101,并且f_price大于等于5的:

SELECT * from 表名 where s_id = '101' and f_price >=5;

14、查询s_id = 101或者102,且f_price大于5,并且f_name='apple'的:

SELECT * from 表名 where s_id in('101', '102') and f_price >= 5 and f_name = 'apple';


带OR的多条件查询

15、查询s_id=101或者s_id=102的:

SELECT * from 表名 where s_id = 101 OR s_id = 102;


去重查询

16、查询fruits表中s_id字段的值,返回s_id字段值且不得重复:

SELECT distinct s_id FROM fruits;


升序与降序

order by 字段名 升序order by 字段名 desc 降序

17、查询表的f_name字段值,并对其进行排序:

SELECT f_name FROM 表名 order by f_name;

18、查询表中的f_name和f_price字段,先按f_name排序,再按f_price排序:

SELECT * from 表名 order by f_name, f_price;

19、查询表中的f_name和f_price字段,对结果按f_price降序方式排序:

SELECT * from from order by f_price desc;

20、查询表,先按f_price降序排序,再按f_name字段升序排序:

SELECT * from 表名 order by f_price desc, f_name;


分组查询

21、按顺序进行排列并去重:

select * from 表名 group by s_id;

22、根据s_id对表中的数据进行分组,并显示水果种类大于1的分组信息:

SELECT s_id, GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id HAVING COUNT(f_name) > 1;

23、在 group by 子句中使用 with rollup:

SELECT * from 表名 group by 字段 with rollup;


多字段分组

24、根据s_id和f_name字段对表中的数据进行分组:

SELECT * FROM 表名 group by s_id,f_name;


GROUP BY和ORDER BY一起使用

25、SELECT * from 表名 group by u_name having u_age > 20 order by u_id;


用LIMIT限制查询结果的数量

26、统计共有多少行:

SELECT count(*) From 表名 ;

26、显示fruits表查询结果的前4行:

SELECT * From 表名 limit 4;

27、从第5个记录开始的,行数长度为3的记录:

SELECT * From 表名 limit 4, 3;


使用集合函数查询

COUNT()计数函数SUM()求和函数AVG()平均函数MAX()最大值函数MIN()最小值函数


28、查询表中总的行数:

SELECT COUNT(*) AS cust_num FROM 表名;

29、查询表中有电子邮箱的顾客的总数:

SELECT COUNT(c_email) AS email_num FROM 表名;

30、在表中查询30005号订单一共购买的水果总量:

SELECT SUM(quantity) AS items_total FROM 表名 WHERE o_num = 30005;

31、在表中,使用SUM()函数统计不同订单号中订购的水果总量:

SELECT o_num, SUM(quantity) AS items_total FROM 表名 GROUP BY o_num;

32、在表中,查询s_id=103的供应商的水果价格的平均值:

SELECT AVG(f_price) AS avg_price from 表名WHERE s_id = 103;

33、在表中,查询每一个供应商的水果价格的平均值:

SELECT s_id,AVG(f_price) AS avg_price from表名 GROUP BY s_id;

34、在表中查找市场上价格最高的水果:

SELECT MAX(f_price) AS max_price from 表名;

35、在表中查找不同供应商提供的价格最高的水果:

SELECT s_id, MAX(f_price) AS max_price from 表名GROUP BY s_id;

36、在表中查找f_name的最大值:

SELECT MAX(f_name) FROM fruits;

37、在表中查找市场上价格最低的水果:

SELECT MIN(f_price) AS min_price from 表名;

38、在表中查找不同供应商提供的价格最低的水果:

SELECT s_id, MIN(f_price) AS min_price from 表名GROUP BY s_id;


连接查询

1.内连接查询2.外连接查询3.复合条件连接查询

LEFT JOIN 左表全记录,右表符合条件

RIGHT JOIN 右表全记录,左表符合条件

14、内连接查询:

SELECT 字段 from 表1 INNER JOIN 表2 ON 匹配条件;

40、外连接查询(左连接):

select 字段 from 表1 left join 表2 on 匹配条件;

41、外连接查询(右连接):

select 字段 from 表1 left outer join 表2 on 匹配条件;

42、复合条件连接查询:

SELECT 字段FROM 表1 INNER JOIN 表2 ON 表1.字段1 = 表2.字段1 AND 字段1 = 10001;


子查询
带ANY、SOME关键字的子查询

带ALL关键字的子查询

带EXISTS关键字的子查询

带IN关键字的子查询

带比较运算符的子查询合并查询结果

43、带ANY、SOME关键字的子查询:

SELECT num1 FROM 表1 WHERE num1 > ANY (SELECT num2 FROM 表2 where num2);

44、带ALL关键字的子查询(返回tbl1表中比tbl2表num2 列所有值都大的值):

SELECT num1 FROM tbl1 WHERE num1 > ALL (SELECT num2 FROM tbl2);

45、带exists关键字的子查询(查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中的记录):

SELECT * FROM fruits WHERE exists (SELECT s_name FROM suppliers WHERE s_id = 107);

46、查询suppliers表中是否存在s_id=107的供应商,如果不存在则查询fruits表中的记录:

SELECT * FROM fruits WHERE NOT EXISTS(SELECT s_name FROM suppliers WHERE s_id = 107);

47、带IN关键字的子查询(在orderitems表中查询f_id为c0的订单号,并根据订单号查询具有订单号的客户c_id):

SELECT c_id FROM orders WHERE o_num IN(SELECT o_num FROM orderitems WHERE f_id = 'c0');

还可以是:

SELECT c_id FROM orders WHERE o_num IN (30003, 30005);

48、带比较运算符的子查询(在suppliers表中查询s_city等于“Tianjin”的供应商s_id,然后在fruits表中查询所有该供应商提供的水果的种类):

SELECT s_id, f_name FROM fruits WHERE s_id =(SELECT s1.s_id FROM suppliers AS s1 WHERE s1.s_city = 'Tianjin');

49、合并查询结果(查询所有价格小于9的水果的信息,查询s_id等于101和103的所有水果的信息,使用UNION ALL连接查询结果):

SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 UNION ALL SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101,103);



为表和字段取别名

 为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名替代表原来的名称

为表取别名

50、为orders表取别名o,查询30001订单的下单日期:

SELECT * FROM orders AS o WHERE o.o_num = 30001;

51、为customers和orders表分别取别名,并进行连接查询:

SELECT c.c_id, o.o_num FROM customers AS c LEFT OUTER JOIN orders AS o ON c.c_id = o.c_id;

为字段取别名

52、查询fruits表,为f_name取别名fruit_name,f_price取别名fruit_price,为fruits表取别名f1,查询表中f_price < 8的水果的名称:

SELECT f1.f_name AS fruit_name, f1.f_price AS fruit_price FROM fruits AS f1 WHERE f1.f_price < 8;


使用正则表达式查询

查询以特定字符或字符串开头的记录 ^

查询以特定字符或字符串结尾的记录 $

用符号"."来替代字符串中的任意一个字符

使用"*"和"+"来匹配多个字符

匹配指定字符串

匹配指定字符中的任意一个

匹配指定字符以外的字符

使用{M}或者{M,N}来指定字符串连续出现的次数


53、在表中,查询字段字段以字母'b'开头的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP '^b';

54、在表中,查询字段以字母'y'结尾的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP 'y$';

55在表中,查询字段值包含字母'a'与'g'且两个字母之间只有一个字母的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP 'a.g';

56、在表中,查询字段值以字母'b'开头,且'b'后面出现字母'a'的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP '^ba*';

57、在表中,查询字段值以字母'b'开头,且'b'后面出现字母'a'至少一次的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP '^ba+';

58、在表中,查询字段值包含字符串“on”的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP 'on';

59、在表中,查询字段值包含字符串“on”或者“ap”的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP 'on|ap';

60、在表中,查找字段中包含字母'o'或者't'的记录:

SELECT * FROM 表名 WHERE 字段 REGEXP '[ot]';

61、在表中,查询字段包含字母a~e和数字1~2以外的字符的记录:

SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';

62、在表中,查询字段值出现字母'x'至少2次的记录:

SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';