查询的整体语法: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,}';