sql查询语句,单表,多表

一、单表查询

1、查询所有列

SELECT * FROM 表名;

2、查询指定列

SELECT 列名1, 列名2,……, 列名n FROM 表名;

3、WHERE 条件查询

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字: =、!=、<、>、>=、
<> 不等于
BETWEEN 开始值 AND 临界值(范围);(:1.开始值<结束值 2.包含临界值的)
IN(数值1,数值2,……,数值n)(包含);
IS NULL(不为空);
AND(且);
OR(或);
NOT(非);

SELECT * FROM 表名 WHERE 条件;

SELECT 列名1, 列名2,……, 列名n FROM 表名 WHERE 条件;

从前有个数据库,库里面有张表

 (1)查询学生表中性别为女,并且年龄50以内的记录

select * from stu where gender = 'female' and age < 50;

(2)查询学生表学号为S_1001,或者姓名为liSi的记录 

select * from stu where sid = 's_1001' or sname = 'lisi';

(3)查询学生表中学号为S_1001,S_1002,S_1003的记录

select * from stu where sid in('S_1001', 'S_1002', 'S_1003');

(4)查询学生表中学号不是S_1001,S_1002,S_1003的记录

select * from stu where sid not in('S_1001', 'S_1002', 'S_1003');

 (5)查询学生表中年龄为null的记录

select * from stu where age is null;

 (6) 查询年龄在20到40之间的学生记录

select * from stu where between 20 and 40;

-- 或者
select * form stu where age >= 20 and age <= 40;

 (7) 查询性别非男的学生记录

select * from stu where gender != 'male';

-- 或者
select * from stu where gender <> 'male';

-- 或者
select * from stu where not gender = 'male';

(8) 查询姓名不为null的学生记录

select * from stu where sname is not null;

-- 或者
select * from stu where not sname is null;

 4、LIKE 模糊查询

模糊查询需要使用关键字LIKE。

通配符:
_(下划线): 任意一个字符
%:任意0~n个字符,

select * from 表名 where 列名 like 查询内容

 还是熟悉的学生表

 

(1)查询姓名由3个字构成的学生记录

-- 三条下划线,每个'_' 表示一个任意字符(字和字母的意思哟)
select * from stu where sname like '___';

(2)查询姓名由5个字母构成,并且第5个字母为“i”的学生记录 

select * from stu where sname like '____i';

 (3)查询姓名以“z”开头的学生记录

-- '%' 表示任意长度的任意字符
select * from stu where sname like 'z%';

(4)查询姓名中包含“a”字母的学生记录

select * from stu where sname like '%a%';

5、DISTINCT  去除重复记录

select distinct 列名 from 表名;

6、IFNULL  如果列名为null 则转换为转换值

select ifnull(列名, 替换值) from 表名;

7、order by 排序

--  asc 升序   
-- desc 降序  默认升序 asc(可以省略不写)
select * from 表名 order by 要排序的列名  asc/desc

-- 表示当列名1的内容相等时按照列名2排序以此类推
select * from 表名 order by 要排序的列名1, 列名2, ……,列名n  asc/desc

8、聚合函数

8.1、 COUNT(列名)

                        统计指定列不为NULL的记录行数;

当需要纵向统计时可以使用COUNT()。

select count(*/列名) from 表名

8.2、SUM(列名) 和

 当需要纵向求和时使用sum()函数。

select sum(列名) from 表名;

-- 一个简单的栗子呀

-- 统计所有学生的年纪总和(虽然很离谱)  pps :还是上面的那张表哦
select sum(age) from stu;

8.3、 AVG(列名)  平均值

select avg(列名) from 表名;

-- 一个简单的栗子呀

-- 统计所有学生的平均年纪(不太离谱了吧)  pps :还是上面的那张表哦
select avg(age) from stu;

8.4、MAX(列名)  最大值

select max(列名) from 表名;

8.5、MIN(列名)  最小值

select min(列名) from 表名;

9、GROUP BY  分组

注意:如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名

select 列名 from 表名 group by 列名;

 

 没错还是这张熟悉的表(稍微有所改动)

 (1)查询学生中男女的人数

select gender 性别, count(gender) 人数 from stu group by gender;

 

 10、HAVING 子句

注:having与where的区别:

1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤

2.having后面可以使用分组函数(统计函数) where后面不可以使用分组函数。

WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分 组;而HAVING是对分组后数据的约束。

select 列名 from 表名 where 条件 group by 列名 having 条件;

 11、LIMIT

LIMIT用来限定查询结果的起始行,以及总行数。

limit 开始下标,显示条数;//开始下标---从0开始 ,显示条数--表示默认从0开始获取数据

-- 查询5行记录,起始行从0开始(第一行)
select * from 表名 limit 0,5;


-- 查询10行记录,起始行从3开始(第四行)
select * from 表名 limit 3,10;

 12、分页查询

-- pageIndex 页码值 pageSize 每页显示条数

limit (pageindex-1)*pagesize,pagesize;

查询语句书写顺序:select – from- where- groupby- having- order by-limit

查询语句执行顺序:from - where -group by -having - select - order by-limit

13 、合并结果集

-- 只是个栗子,可以有多个列名呦

--  UNION ALL:不去除重复记录
SELECT */列名 FROM 表名 UNION ALL SELECT */列名 FROM 表名;

-- UNION:去除重复记录
SELECT */列名 FROM 表名 UNION SELECT */列名 FROM 表名;

 

 14、join on 内联查询(多表连接)

 通俗一点讲:内敛查询就像上面那张图一样,当两张表连接时,中间重合的那一坨黄色就是查询出来的结果

内连接的特点:查询结果必须满足条件。

select 列名
from 表1
inner join 表2
on 表1.列名=表2.列名 //外键列的关系
where.....

注:

表1和表2的顺序可以互换

找两张表的等值关系时,找表示相同含义的列作为等值关系。

点操作符表示的格式: 表名.列名

可以使用as,给表名起别名,注意定义别名之后,统一使用别名

当select查询指定列时如果是与外键关联的列,要使用 表名.列名 的格式(这里的表可以是与外键关联的表也可以是外键当前的表),否则会报错

 三表联查

-- 语法

-- 第三张表(或者更多表)连接时要注意连接条件(on后面的)要是与外键关联的表的字段而不是随便任意字段

select 列名 from 表1
 inner join 表2 on 表1.列名=表2.列名
 inner join 表3 on 表1或表2.列名=表3.列名 where

 15、外联查询

15.1、左外联

左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的 显示NULL。

和内联一样的通俗的讲:左外联就是两个表连接时图上绿色的那一坨

select 列名 from 主表 left join 次表 on 主表.列名=次表.列

15.2、右外联

右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。

一起通俗的讲:右外联是两个表连接时图上红色的那一坨

select 列名 from 次表 right join 主表 on 主表.列名=次表.列名

 15.3、总结

注意:
1.主表数据全部显示,次表数据匹配显示,能匹配到的显示数据,匹配不成功的显示null
2.主表和次表不能随意调换位置

特点:
包括左外连接和右外连接,外连接的特点:查询出的结果存在不满足条件的可能

使用场景:
一般会作为子查询的语句使用

 16、自然连接

自然连接(NATURAL INNER JOIN):自然连接是一种特殊的等值连接,他要求两个关系表中进行连 接的必须是相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列。.

select * from 表1 join 表2;

 17、子查询

一个select语句中包含另一个完整的select语句。

子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么 就是子查询语句了。

子查询出现的位置:

  • where后,作为条为被查询的一条件的一部分;
  • from后,作表;


当子查询出现在where后作为条件时,还可以使用如下关键字:

  • any
  • all

子查询结果集的形式

  • 单行单列(用于条件)
  • 单行多列(用于条件)
  • 多行单列(用于条件)
  • 多行多列(用于表)
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值