第20讲:SQL语法与关键知识点
什么是SQL
SQL 的全称为 Structured Query Language 结构化查询语言,它是一个数据领域的 DSL,也就是说它是一种特殊的构建语法,可以用来支持对数据领域的各种通用操作
SQL的分类
SQL按照用途的不同可以分为四大类:
1.DDL,DDL 是一种数据定义语句,里面主要包含库表创建的语句;
2.DML,DML 是数据操作的语法,里面包含增删改查的基本操作语句;
3.DCL,DCL 是数据库的控制语句,主要用于对一些权限的设定;
4.TCL,TCL 包含一些关于树的相关处理语句
查询语句
基本查询语句
SELEST *FROM titles;
我们还可以对单独的字段进行查询,比如查询某个title字段的内容,可以通过 selest title 查询,如果有多个字段,你还可以使用逗号进行隔开
select title from titles;
再一个是条件查询,比如 select * from titles,你可以指定条件比如 where title='Engineer',这里注意 where 条件是很关键的
SELECT * FROM `titles` where title='Engineer'
还有就是排序,查询出来的数据可以根据emp_no进行排序,通常可以使用 order 语句,by 后面可以添加排序的字段和升降序(默认是升序)
SELECT * FROM `titles` order by emp_no;
然后是分页,很多网站在查询数据时都涉及分页,分页其实就是使用了一个 limit,我们可以使用 offset 指定分页的偏移量是多少。这里显示的是第5行到第14行的数据
SELECT * FROM `titles` limit 10 OFFSET 5;
最后是去重,如果表中的数据是有重复,就可以使用 distinct 来完成对数据的去重操作,以上便是基本的查询语句
SELECT distinct gender FROM employees;
条件查询语句
在查询出结果之后,有的时候我们就需要在结果中筛选一个特定条件的子集,这个时候就需要使用条件查询,条件查询语句就是在 select 语句之后,甚至是 updata、delete 语句之后,添加上一个至关重要的 where 语句,它可以限定一些你想要的条件,那么条件都包含哪些呢?
比如比较查询的值是大于多少、小于多少等等,或者说我的条件是一个字符串,那么我们可以使用一些通配符对字符串进行通配
SELECT * FROM employees WHERE emp_no > 10001;
除此之外,还可以使用一个范围的限定,比如说筛选某个价格在 10 元到 20 元之间产品,就可以使用 between and 语句来完成。再有一个就是对子集的限定,可以使用 in 结构,将某一个字段包含在一个特定的子集内,子集里面即可以是一个单列的数据项,也可以是另外的一个数据结构
SELECT * FROM employees WHERE emp_no BETWEEN 10002 AND 10006;
SELECT * FROM employees WHERE emp_no IN (10002, 10006);
最后就是逻辑关系,当我们需要多个条件匹配到一起的时候,就需要使用 and、or 或者是 not 语句来完成条件的各种复杂的关系判断
SELECT * FROM employees WHERE emp_no IN (10002, 10006) AND gender='M';
聚合查询语句
聚合查询在我们的工作中也非常有用,通常它用来统计一些特定数据,比如说统计员工表中男女员工的人数,你就可以使用 group by 来对某一个字段进行分类,从而计算表中的一些相关数据
在这里举一个简单的例子,我们去查询员工信息表,你可以看到在表中有性别项、我们根据性别统计这家公司里男女员工到底有多少人
SELECT COUNT(gender), gender FROM employees GROUP BY gender;
执行完之后你可以看到这家公司男女员工总共有多少人,当然我们还可以限定一定的条件,这个时候就不能再使用 where了,因为它是限定 group by 的,所以为了区分就有了一个新的关键词 having,having 可以指定到底是哪一个子分类获取数据,以上聚合查询
插入语句
INSERT INTO `employees`(`emp_no`, `birth_date`, `first_name`, `last_name`, `gender`, `hire_date`) VALUES (999,'1991-03-01','beck','zhai','M','2020-01-01');
更新语句
UPDATE employees SET first_name="li", last_name="ming" WHERE first_name="beck";
删除语句
DELETE FROM employees; #删除整个表
DELETE FROM employees WHERE first_name="li"; #删除表里first_name为"li"的数据