SQL(结构化查询语言)

SQL

SQL分类

SQL分类 操作对象 操作 关键字
DDL(数据定义语言) 数据库,表,视图和索引 创建,删除,修改 CREATE,DROP,ALTER
DCL(数据控制语言) 数据库 数据库的事务管理 grant
DML(数据操纵语言) 数据内容 增删改 INSERT INTO,DELETE,UPDATE
DQL(数据查询语言) 数据内容 查询 SELECT

DDL(数据定义)

数据定义,数据库的创建修改删除

DCL(数据控制)

事务管理

授权:

DML(数据操纵)

数据操纵语言,对数据进行增删改

DQL(数据查询)

​ SQL注释和注意事项

1.简单查询

1)基本的查询语句

where条件查询

select name from student where id=1;

(查询id等于1的学生的名字)


组合where子句

操作符 and

select name from student where id>2 and id<6 and age=18;

(and操作符将条件组合在一起,每增加一个过滤条件就要添加一个and)

扫描二维码关注公众号,回复: 12440815 查看本文章

操作符or

select * from student where age>8 or name like “zhang%”;

(查询年龄大于8岁或者名字是zhang开头的 所有人的 学生)


计算次序 当or与and一起出现的时候 and优先级更高

select * from student where age>8 or age<18 and name like “zhang%”;

(查询年龄小于18而且名字是zhang开头的 学生 或者年龄只需要大于8岁的学生)

不过最好用括号()来明确计算次序,括号括起来的先计算


in操作符

select *from student where id in(1,4,2,7);

(in表示指定了条件范围)

过滤查询 关键字distinct(不能有重复的)

SELECT DISTINCT name FROM student; (查询stundent表中所有不重复的名字)

limit限制查询
select *from student order by id  desc limit 1,2;
(根据id倒序排序,从下标为1开始查,查2条数据)
查询多个字段

SELECT id,name from student ; (从student表中查询所有的id和name列,用逗号作为字段之间的分隔符)

别名 as

select id as sid from student;

(查询出来的视图中id字段名变为sid,只是修改视图中的而不会修改原来表中的id名)

连接 concat(" 分隔符",字段1,字段2)

select concat(‘=’id,name) from student;

结果比如就是:2018214491=张三

2)模糊查询

like操作符与%通配符

%通配符(匹配任何字符任意长度,但null不能匹配)

select name from student where name like “张%”;

(查询“张”开头的所有student表中的名字; “%”是一个通配符,表示任何字符他都匹配)

应用场景:栈内搜索(效率比较低)


通配符 _

_只能匹配任意单个字符,不能多个字符


正则匹配

关键字regexp

select * from student where name regexp " [z,c]c" ;

regexp表示后面接的是一个正则表达式;

3)排序以及聚合函数

排序关键字order by

select *from student order bt age; 默认是升序

select *from student order bt age desc; 降序

聚合函数

count() 计算数量

sum() 计算和 select sum(age) from student;求student表格中的年龄之和

avg() 求平均 select avg(age)from student; 求年龄的平均

分组 group by

select count(*)as total ,sex from student group by sex;

(按照sex分组,查出男女各自的数量)

group by having

select count(*),sex from student group by sex having sex=“女”;

按照sex分组查询sex=“女”的数量;

4)字符串模糊查询

2.复杂查询

1)内连接

内连接查询列出与连接条件匹配的数据行,它使用比较运算符来比较被连接的值。


等值连接
select * from stu as s,mark as m where s.id=m.id;

或者
select * from stu as s,mark as m  inner join on s.id=m.id;

(查询mark表的id 与stu表的id相等的所有的列值)   inner join 连接了两个表

ON条件:是过滤两个链接表笛卡尔积形成的 中间表的 约束条件。
意思是上方查询的是两个表的所有列,形成了一个笛卡尔积,以此基础上的约束条件是s.id=m.id

where条件:1在没有on条件的单表查询中, 是限制物理表或者 中间记录查询结果的约束
			2.在有on的时候是两表形成的中间表的查询条件

on只进行连接操作,where只过滤物理表/中间表的记录
having 用在分组中  group by having

不等值连接

运算符有: !=,<,<=, >,>=,<>(不等于), between

select *from stu as s,mark as m where s.id=m.id and m.mark>50;

(在上方等值连接的基础上,在加一个查询条件mark>50分)


自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列


说明:select *from mark,stu ; 返回的是两个表的笛卡尔积

若 mark表内有4条记录, stu有3条记录,那么返回就是3×4=12条记录


2)外连接查询

左连接left join

以左边表为准,左边有有几条记录,返回就几条。

select * from stu as s left join mark as m on s.id=m.id;

假设stu表3条记录,mark表2条记录,以stu为准的话,返回3条记录,但是mark不够,就以null填充

右连接right join

以右边的表为准

全连接

没有以左表为准还是以右表为准。

3)联合查询union all

select *from student union all select *from course;
(把两个表分别查到的数据放到一起,联合查询)

4)子查询

1)视图(概念,如何使用,作用,注意事项)

2)子查询,标量子查询,关联子查询

3)各种常用函数

4.多表查询

1)表的加法

2)联结查询,交叉连接,内连接,外连接(左连接,右连接),全连接

3)联结应用案列

4)case表达式

sql常见面试题:

猜你喜欢

转载自blog.csdn.net/weixin_43919632/article/details/102843160