前言:本篇主要简单概述了什么SQL,SQL里面又有哪些分类,如何进行简单的增删改查以及简要阐述SQL的一些其他功能,为基础篇。更深入的探讨另外有,进阶篇,和面试常问的更实用的SQL调优篇。
进阶篇:https://blog.csdn.net/weixin_45764765/article/details/109039682
SQL(Structured Query Language)结构化查询语言,是一种用来操作数据库的特定语法,是关系型数据库的标准语言。
1、DQL 数据查询语言
注:在数据库中,SQL语句大小写不敏感,也就是说select 和 SELECT 作用都是一样的。
>> 下面对如何操作员工表emp进行一定了解:
EMPNO 员工编号 ENAME 姓名 JOB 职位
HIREDATE 入职时间 SAL 工资 COMM 奖金
(1)简单查询
1)含义:从哪个表查询出哪些列的数据,* 星号表示查询所有的列
语法格式:SELECT {*, column [alias],...} FROM table_name [where ...]
示例:
①查询出所有的员工的所有信息
SELECT * FROM emp
②查询所有员工的名字和工作
SELECT ENAME, JOB FROM emp
2)消除结果中重复的数据 DISTINCT
语法格式:SELECT DISTINCT 列名,... FROM table_name
示例:查询emp表中有什么工作(因为很多人做着相同的工作,这时就会需要消除重复)
SELECT DISTINCT JOB FROM emp
3)在加减乘除的运算上
对于NUMBER型的数据可以加减乘除,和日常数学规则差不多 —> 加 + 减 - 乘 * 除 /
①乘除优先加减
②同级运算从左到右
③带括号()优先级最高
示例:
①查询员工一个月的所有收入(这就包括了基本工资和奖金)
SELECT ENAME, SAL + COMM FROM emp
4)取别名:用关键字 AS(AS是可以省略的)
1* 有这么几个作用:
改变表的名字用于表示计算结果的含义作为列的别名
2* 之前的查询结果可以取个别名:
SELECT ENAME, SAL + COMM AS 月收入 FROM emp
AS 关键字,一般用来给列 或 表取别名
也可以省略AS:
SELECT ENAME, SAL + COMM 月收入 FROM emp e
3* 特别注意:使用别名时,要熟知SQL的执行顺序
SELECT语句执行顺序: 先执行FROM--->接着执行WHERE--->再执行SELECT--->最后执行ORDER BY
所以,这样的SQL是错的,SELECT ENAME AS name FROM emp WHERE name = '坦克'
(2)过滤查询
1)使用比较运算符过滤
不等于 !=
不等于 <>
等于 =
大于 >
小于 <
大于或等于 >=
小于或等于 <=
示例:
①查询工资大于1000的所有员工信息
SELECT * FROM emp WHERE SAL > 1000
②查询工作不是战士的所有员工信息
SELECT * FROM emp WHERE JOB != '战士'
注:字符串和日期要用单引号
2)逻辑运算符
AND(或&&)
OR(或||)
NOT(或!)
示例:
①查询工资在1000~2000(包括1000和2000)的员工
SELECT * FROM emp WHERE SAL >= 1000 AND SAL <= 2000 SELECT * FROM emp WHERE SAL > 1000 && SAL < 2000
注意:到这里了,综合一下以上的优先级:
括号 > 所有的比较运算符 > NOT > AND > OR
3)范围查询 BETWEEN 是个闭区间
语法格式:SELECT <columnList> FROM table_name WHERE 列名 BETWEEN minvalue AND maxvalue
示例:上面的 -> ①查询工资在1000~2000(包括1000和2000)的员工 <- 还可以这样写
SELECT * FROM emp WHERE SAL BETWEEN 1000 AND 2000
②查询出所有在1981年雇佣的雇员信息。 SELECT * FROM emp WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31'
4)集合查询
使用IN运算符,判断列的值是否在指定的集合中
语法格式::SELECT <columnList> FROM table_name WHERE IN (值1,值2....)
示例:
①查询工作为射手,辅助,战士的所有员工
SELECT * FROM emp WHERE JOB IN ('射手','辅助','战士')
②查询工资为950,3000的所有员工
SELECT * FROM emp WHERE SAL IN (950, 3000)
5)空值查询 IS NULL
示例:查询奖金为空的员工
SELECT * FROM emp WHERE COMM IS NULL
6)模糊查询
使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字
%通配符:可表示任意个数的任意字符_通配符:可表示一个任意字符示例:
①查询名字带有 '大' 的所有员工 SELECT * FROM emp WHERE ENAME LIKE '%大%'
②查询名字带有'赵丽?'的所有员工 SELECT * FROM emp WHERE ENAME LIKE '赵丽_'
③查询名字带有'赵丽??'的所有员工 SELECT * FROM emp WHERE ENAME LIKE '赵丽__'
注:通配符:用来实现匹配部分的特殊字符
(3)结果集排序
先有结果数据,再使用ORDER BY排序,ORDER BY 子句出现在SELECT语句的最后。
ASC : 升序(可以省略,默认不写就是升序)
DESC: 降序
语法格式:SELECT <selectList> FROM table_name WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
示例:
①查询到所有员工信息后,按工资降序
SELECT * FROM emp ORDER BY SAL DESC
②查询工作是‘射手’的员工后,按工资降序
SELECT * FROM emp WHERE JOB = '射手' ORDER BY SAL DESC
(4)分页查询
语法格式:LIMIT ?, ?
参数1:开始页
参数2:每页多少条数据
示例:
SELECT * FROM emp LIMIT 0, 5
SELECT * FROM emp LIMIT 0, 10
(5)聚合函数(分组函数,统计函数,聚集函数)
作用于一组数据,并对一组数据返回一条记录。
1)COUNT:统计结果记录数 (COUNT(*))
2)MAX: 求最大值
3)MIN: 求最小值
4)SUM: 求和
5)AVG: 求平均值
----------------------------------------------------------------------------------
示例:
1)COUNT:统计结果记录数 (COUNT(*))
①COUNT(column_name) 函数返回指定列的有值的数目
SELECT COUNT(SAL)FROM emp
②COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目
SELECT COUNT(DISTINCT SAL)FROM emp
2)MAX: 求最大值
查询基本工资最高的员工
SELECT *, MAX(SAL) FROM emp
3)MIN: 求最小值
查询基本工资最低的员工
SELECT *, MIN(SAL) FROM emp
4)SUM: 求和
查询一个月老板总共要发多少基本工资 SELECT SUM(SAL) FROM emp
5)AVG: 求平均值
查询整个公司员工的平均工资
SELECT AVG(SAL) FROM emp
2、DML 数据库操作语言
(1)保存操作
含义:把哪些值插入到哪个表的哪些列中
语法格式:INSERT INTO table_name (column1,column2,column3...) VALUES (value1,value2,value3...);
注意:要插入的列和值一定要一一对应.(时间和字符串一定要使用单引号)
示例:
在emp表中新增一条数据,姓名是李白,工作是刺客,入职时间是2020-10-12,工资保密,奖金100
INSERT INTO emp (ENAME, JOB, HIREDATE, SAL, COMM) VALUES ('李白', '刺客', '2020-10-12', null, 100)
注:
①列名与值,个数和位置都要一一对应,对不想设置值的列可以不写,但是写了至少要给默认值null占位。
比如ENAME —— “李白”,SAL —— null
②时间和字符串一定要加单引号 ''
(2)更新操作
含义:更新哪个表设置哪些列的等于哪些值条件是什么
语法格式:UPDATE table_name SET columnName = value [, columnName = value, ...] [WHERE condition];
注:where子句作为条件,如果省略了where子句,则全表的数据都会被修改。
示例:
① 修改emp表中的工作为辅助,工资为0(注意不加where条件,即视为修改表中的所有数据)
UPDATE emp SET JOB = '辅助' , SAL = 0
②修改emp表中名字叫百里玄策的工作为辅助,工资为0(则只会修改名字为百里玄策的数据)
UPDATE emp SET JOB = '辅助', SAL = 0 WHERE ENAME = '百里玄策'
(3)删除操作
含义:从哪个表中删除数据
语法格式:DELETE FROM tablename [WHERE condition];
示例:
①从emp表删除数据(注意如果没有where条件即删除该表的全部数据,谨慎!!!)
DELETE FROM emp
②从emp表删除名字叫 吕布 的数据
DELETE FROM emp WHERE ENAME = '吕布'
3、TPL 事务处理语言
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
4、DCL 数据控制语言
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、DDL 数据定义语言
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
6、CCL 指针控制语言
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。