2

###常用的SQL语句查询

 2 years ago
source link: https://blog.51cto.com/u_15397018/5470092
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

###常用的SQL语句查询

原创

韦建国 2022-07-14 08:15:48 博主文章分类:数据库 ©著作权

文章标签 字段 表名 子查询 文章分类 Linux 系统/运维 yyds干货盘点 阅读数164

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK