音乐播放器
琢钰
 
文章 标签
12

Powered by X2 | Theme: Fog
载入天数...
载入时分秒...
总访问量:  |   访问人数:
御风飞行中...

总复习08-数据库

  热度: loading...

DQL

基础查询

SELECT 查询列表 FROM 表名;

查询的结果集是一个虚拟表

▲执行顺序

  1. FROM子语句
  2. SELECT子语句

查询列表

  1. 查询常量

    SELECT 100;
    
  2. 查询表达式\

    SELECT 100%3;
    
  3. 查询单个字段

    SELECT last_name FROM employees;
    
  4. 查询多个字段

    SELECT last_name,email,employee_id FROM employees;
    
  5. 查询所有字段

    SELECT * FROM employees;
    
  6. 查询函数(调用函数,获取返回值)

    	SELECT DATABASE();
    	SELECT VERSION();
    	SELECT USER();
    

####起别名

  1. 使用as关键字
  2. 使用空格

加号的作用

  1. 加法运算
    • 两个操作数都是数值型
    • 其中一个操作数为字符型,如果无法转换直接当做0处理
    • 其中一个操作数为null,结果都是null

字符的拼接不能用+号,应该用CONCAT函数

distinct的使用

写在需要去重的字段名前

查看表的结构

	DESC employees;
	SHOW COLUMNS FROM employees;

ifnull函数

ifnull(commission_pct,‘空’),如果为空则显示后面的值,不为空则显示本身。

条件查询

语法:

SELECT 查询列表
FROM 表名
WHERE 查询条件

▲执行顺序

  1. FROM子句
  2. WHERE子句
  3. SELECT子句

按关系表达式查询

SQL中的不等于号用<>!!
!=也可,但兼容性不如<>。

按逻辑表达式查询

逻辑运算符:and or not 兼容&& || !但同样不建议

模糊查询

like /in /between and /is null

排序查询

语法:

SELECT 查询列表
FROM 表名
[WHERE 筛选条件]
ORDER BY 排序列表

▲执行顺序

  1. from子句
  2. where子句
  3. select子句
  4. order by子句

DESC 降序 ASC升序 默认升序

SELECT last_name,salary,department_id
FROM employees
ORDER BY salary,department_id DESC;

salay还是默认升序,DESC只对一个字段起作用。建议加上AS语义性更强。

  • 排序方式

    1. 按单个字段排序

    2. 按表达式排序

    3. 按别名排序

    4. 按函数的结果排序

    5. 按多个字段排序

    6. 按列数排序 ORDET BY后面直接加数字代表第几列

      SELECT *
      FROM employees
      ORDER BY 2;
      

常见函数

  1. 字符函数

    • CONCAT 拼接字符

    • LENGTH 获取字节长度

    • CHAR_LENGTH 获取字符长度

    • SUBSTRING 截取子串

      SUBSTR(str,起始索引,截取的字符长度)

      SUBSTR(str,起始索引)

    • INSTR 获取字符第一次出现的索引

    • TRIM 去前后指定的字符,默认是去空格

      SELECT TRIM('x' FROM 'xxxxxxxxxMINIGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') as a;
      
    • LPAD/RPAD 左填充/右填充

      SELECT LPAD('周杰伦',10,'NB');
      
      image-20201026001322094
    • UPPER/LOWER 大写/小写

    • STRCMP 比较两个字符大小

    • LEFT/RIGHT 截取子串

  2. 数学函数

    • ABS 绝对值
    • CEIL 向上取整
    • FLOOR 向下取整
    • ROUND 四舍五入
    • TRUNCATE 截断 小数点后保留几位
    • MOD 取余
  3. 日期函数

    • NOW 获取当前时间+日期
    • CURDATE 获取日期
    • CURTIME 获取当前时间
    • DATEDIFF 获取时间差
    • DATE_FORMAT 格式化时间日期
    • STR_TO_DATE 按指定的格式解析字符串为日期类型
  4. 流程控制函数

    • IF
    • CASE WHEN
  5. 分组函数

    往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数。

    • SUM 求和函数

    • AVG

    • MAX

    • MIN

    • COUNT 计算数据个数函数

      COUNT(1)
      COUNT(*)
      同样的效果相当于多加了一列全是1
      

分组查询

语法:

SELECT 查询列表

FROM 表名

WHERE 筛选条件

GROUP BY 分组列表

ORDER BY 排序列表;

特点:

  1. 查询列表往往是分组函数和被分组的字段
  2. 分组前筛选用WHERE,分组后筛选用HAVING。

▲执行顺序

  1. from子句
  2. where子句
  3. group by子句
  4. having子句
  5. select子句
  6. order by子句

连接查询

分类

  • 按年代分类
    • SQL92标准:仅仅支持内连接
    • SQL99标准
  • 按功能分类
    • 内连接
      • 等值连接
      • 非等值连接
      • 自连接
    • 外连接
      • 左外连接
      • 右外连接
      • 全外连接
    • 交叉连接

SQL92语法

  1. 内连接

    • 等值连接

      语法:

      SELECT 查询列表
      FROM 表名1,表名2,....
      WHERE 等值连接的连接条件

      特点:

      1. 为了解决多表中的字段名重名问题,往往为表起别名,提高了语义性
      2. 表的顺序无要求
    • 非等值连接

    • 自连接

SQL99语法

  1. 内连接

语法:
SELECT 查询列表
FROM 表名1 别名
【INNER】 JOIN 表名2 别名
ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选
ORDER BY 排序列表;

SQL92与SQL99的区别:

SQL99,使用JOIN关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高阅读性。

  1. 外连接

查询结果为主表中所有的记录,如果从表有匹配项,则显示匹配项,如果没有匹配项,则显示null。

应用场景:一般用于查询主表中有但从表没有的纪录

特点:

  1. 外连接分主从表,两表的顺序不能任意调换
  2. 左连接的话,左边为主表。右连接亦然。

语法:
SELECT 查询列表
FROM 表名1 别名
LEFT|RIGHT 【OUTER】 JOIN 表名2 别名
ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选
ORDER BY 排序列表;

分页查询

语法:

SELECT 查询列表
FROM 表1 别名
JOIN 表2 别名
ON 连接条件
WHERE 筛选条件
GROUP BY 分组列表
HAVING 分组后筛选
ORDER BY 排序列表
LIMIT 起始条目索引,显示的条目数;

特点:

  1. 起始条目索引从0开始,如果不写,则就是从0开始显示。

▲执行顺序

  1. from子句
  2. join子句
  3. on子句
  4. where子句
  5. group by子句
  6. having子句
  7. select子句
  8. order by子句
  9. limit子句

联合查询

当查询结果来自于多张表,但多张表之间没有关联,这个时候往往会使用UNION查询。

语法“:

SELECT 查询列表 FROM 表1 WHERE 筛选条件
UNION
SELECT 查询列表 FROM 表2 WHERE 筛选条件

特点:

  1. 列数必须一致。
  2. 列名根据第一个表。
  3. UNION会自动去重。可以使用UNION ALL 不去重。

DDL

库的管理

  1. 创建数据库

    CREATE DATABASE IF NOT EXISTS stuDB;
    
  2. 删除数据库

    DROP DATABASE IF EXISTS stuDB;
    

表的管理

  1. 创建表

  2. 修改表

    ALTER TABLE 表名 ADD|MODIFY|CHANGE|DROP|RENAME TO COLUMN 字段名 字段类型 【字段约束】;
    
  3. 删除表

  4. 复制表

    • 仅仅复制表的结构
    CREATE TABLE 新表名 LILE 表名
    
    • 赋值表的结构和数据
    CREATE TABLE 新表名 SELECT 需要复制的列名列表 FROM 表名
    

DML

数据的插入

语法:

INSERT INTO 表名(字段1,字段2,....) values (值1,值2,...)

特点:

  1. 字段和值列表一一对应
  2. 数值型的值,不用使用单引号,非数值型的值,必须使用单引号
  3. 字段顺序无要求

数据的修改

update 表名 set 字段名 = 新值,字段名 = 新值,....
WHERE 筛选条件;

数据的删除

  1. delete语句

    delete from 表名 where 筛选条件;
    
  2. truncate语句

    truncate from 表名;/删除该表,直接重建结构相同的表
    

区别:

  1. delete可以添加where条件,truncate不可以。
  2. truncate的效率较高
  3. 如果删除带自增长列的表,使用delete删除后,重新插入数据,记录从断点开始。使用truncate记录从1开始。
  4. delete删除数据会返回受影响的行数。
  5. delele删除数据可以支持事务回滚。

DCL

事务四大特性:ACID

隐式事务:DML的insert、update、delete