数据库面试基础笔记整理

简单DQL:

  1. 所有的查询,不会影响表中数据的变化。
  2. 关键词大小写没有硬性要求,规范是大写
  3. 通过使用(),调整四则运算中的优先级
  4. Null值在做任何运算时,结果都是Null
  5.  *  代表全部
  6. 起别名:列名(空格)别名  或者列名 AS 别名 ;别名提高效率
  7. 特殊字符,可使用“”进行强制显示。
  8. DISTINCT,在某字段中消除重复,仅显示单一存在的元素。
    1. 在一个表中,只能出现一次,并且只能出现在SELECT之后。
    2. 当DISTINCT后有多个字段名时,消除所有字段中内容全部重复的行。
  9. 分号可以不用写
  10. 查询某列,也叫投影查询

条件DQL:

  1. 单条件查询:WHERE 表达式;  表达式:列明 条件运算符 要比较的值
  2. 字符型和日期型进行条件查询时,必须加上单引号或者双引号
  3. 常用的特殊比较运算符:BETWEEN..AND...、IN、LIKE、IS NULL
  4. BETWEEN..AND...关键词,有大小排序要求
  5. 是否是NULL值   使用IS Null  或者 IS NOT Null判断
  6. IN查询某列的值是否和给定集合内的任意一个值相等
    1. 语法:WHERE 列名  IN (值1, 值2, ....值n)
    2. 逻辑或关系
  7. LIKE模糊查询,查询出某列的值是否满足关键字匹配
    1. 语法:列名 LIKE 条件
    2. %:百分号,代表匹配零个或任意个字符
    3. _:下划线,代表一个字符
    4. 当 条件中没有通配符,LIKE等于 =
    5. 当出现通配符作为查询条件时,通过转义字符进行查询 能将紧跟在后的通配符变为普通字符
      • ESCAPE
  8. 多条件查询,条件之间使用AND OR NOT 逻辑关系进行连接

排序DQL:

  1. 语法:ORDER BY 列名1  |  列别名1  | 列序号1 [ ASC | DESC ],   列名2  |  列别名2  |  列序号2 [ ASC | DESC ]
  2. 只能在SELECT 语句的最后
  3. 默认ASC升序,DESC表示降序
  4. 空值在升序排列中排在最前面,在降序排列中排在最后
  5. 多列排序:前列相同,后列排序
  6. SELECT ename,sal,sal*12 FROM emp order by 1 ASC ;  依据表中第一个列排序。 该题对ename排序。

多表DQL:

  1. 不是所有表之间都能做多表查询,前提:表之间存在关系
  2. WHERE子句书写连接条件
  3. 不同表的相同列,使用表名前缀进行区分
  4. 对n个表进行查询,至少要有n-1个连接条件
  5. 多表连接分类
    1. 连接条件:等值连接、非等值连接
    2. 连接方式:外连接、内连接
    3. 笛卡尔积(也称交叉连接)产生的条件:
      • 连接条件失效
      • 不写连接条件
    4. 笛卡尔积的特点:
      • 数据量是两个表数据数的乘积
      • 将A表中每条记录与B表中的每条记录进行连接
  6. 自链接:自己与自己表连接;
  7. SQL1999标准语法:
    1. FROM 表1 JOIN 表2  ON(连接条件) WHERE 过滤条件
  8. 左外连接:左表中符合连接条件和不符合连接条件的数据(所有数据),右边表只查询符合连接条件的数据。
  9. 右外连接:右表中符合连接条件和不符合连接条件的数据(所有数据),左边表只查询符合连接条件的数据

查询所有雇员姓名,部门编号,部门名称,包括没有员工的部门也要显示出来

SELECT     e.ename,e.deptno,d.loc

FROM       emp e

RIGHT  OUTER JOIN dept d

ON         (e.deptno = d.deptno);

  1. 集合运算(用在两个SELECT语句之间)
    1. 并集;UNION又称为联合查询:把多个查询结果合并起来,形成一个新的查询结果集(并集),ALL表示包含两个结果集中重复数据是否消除。执行结果与oracle 全外连接效果相同(oracle支持全外连接)
    2. 交集:INTERSECT 取两个表的相同数据
    3. 差集:EXCEPT 取两个表的不同数据

分组DQL

分组函数也叫聚合函数,对表中的一组数据进行操作,每组只返回一个结果。

  1. 用法: SELECT  分组函数(列名)
  2. MAX、MIN、SUM、AVG、COUNT、
  3. 分组函数在使用时,忽略空值   
  4. IFNULL(n1,n2)如果不是NULL,则返回n1。 否则,IFNULL函数返回n2。    
  5. GROUP BY 子句:将表中满足WHERE条件的记录按照指定的列划分成若干个小组,划分的规则是:把满足条件的记录,在该列上相同的值做为一组。可做多列分组。每个部门每个职位分组  位置在WHERE后,ORDER之后。
  6. 当有GROUP BY子句时,SELECT子句后面只能写:被分组的列、分组函数      
  7. 如果先过滤在分组,过滤条件写在WHERE中,如果先分组在过滤,过滤条件写在HAVING中。(HAVING写法与WHERE相同,但是能使用WHERE不能使用的分组函数)
  8. SQL语句,最先执行FROM子句,然后 ON、JOIN、WHERE、GROUP BY、HAVING、SELECT、DISTINCT、ORDER BY、LIMIT
  9. 在MySQL中,起别名会被预先执行。Oracle不允许。

分页DQL

  1. LIMIT [start,]length   limit接受一个或两个整数参数。start表示从第几行记录开始输出(不写默认是0),length表示输出的记录行数。
  2. 起始索引从0开始,起始索引=(查询页码-1)* 每页显示的记录数
  3. 如果查询的是第一页数据(10条数据),起始索引可以省略,直接简写为 limit 10

子DQL

1.SELECT    select_list  FROM    table  WHERE   expr operator

( SELECT    select_list   FROM     table);

括号内的查询叫做子查询,也叫内部查询,先于主查询执行。

 子查询的结果被主查询(外部查询)使用

 expr operator包括比较运算符:单行运算符:>、=、>=、<、<>、<=

    多行运算符: IN、ANY、ALL

  1. 子查询要参考主查询的需求
  2. 多行子查询,>ANY相当于,大于子集中的最小值。>ALL相当于大于自己中的最大值,Oracle不支持多行子查询。
  3. 子查询允许存在空指针
  4. SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>1000;

SELECT * FROM (SELECT deptno,SUM(sal) sum_sal FROM emp GROUP BY deptno) t WHERE t.sum_sal>1000;

两个语句查询结果相同,FROM可接临时表

  1. 尽量不使用子查询。

DML数据操作


1. 增加值

    1. 插入单行数据:INSERT INTO    表名  ( 列名1 ,列名2, ......列名n )   VALUES    (值1, 值2, ...   值n); 列名1 列名2 列名3  (可以不按表单顺序书写列名,但是必须一一对应)

值1    值2   值3(有数据类型限制)

    1. 可以不写表头行,值默认与表单列名一一对应
    2. 可以使用逗号分割,使用一个VALUES子句,一次写入多行数据

         

    1. 如果只书写前部分列数据,其余部分自动设置为默认值
    2. 获取日期类型数据:
      • SELECT SYSDATE();----获取系统时间函数
      • SELECT  CURRENT_DATE();---获取当前日期
      • SELECT CURTIME();---获取当前时间  等等
    3. 使用子查询进行数据插入
      • INSERT INTO 表名 (列名1,列名2,列名3) SELECT  empno,ename,sal FROM emp_test;
  1. 修改值
    1. 语法:UPDATE  表名 SET 列名1 = 值1,列名2 = 值2,....列名n = 值n;

说明:SET子句用来限定修改哪些列,一次可以修改一个列,也可以同时修改多个列,每个列之间用逗号分割。

    1. 修改指定位置:
      • 使用WHERE子句用来过滤修改行
      • WHERE 条件表达式
  1. 删除值
    1. DELECT FROM emp_copy WHERE deptno =(SELECT sal FROM emp WHERE ename=’scott’);
    2. DELETE FROM 表名;   删除表中所有行
    3. 使用WHERE子句做条件过滤,删除部分行
    4. 可通过起别名进行伪装

TCL 事务控制

  1. 事务:英文单词Transaction,是由一个或多个SQL语句所组成的操作集合,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。来保证数据的一致性。
  2. SQL语句默认每个语句独立。
  3. 语法:
    1. 从开启事务到结束事物之间的SQL语句是一个事务
    2. 事务开启:
      • 一旦执行DML操作,就自动开启。
      • 通过BEGIN 或 START TRANSACTION 开启事务。
    3. 事务结束:
      • Orcal自动结束事物,SQL使用手动结束(需要提前使用将自动结束改为手动结束:SET autocommit=0;)
      • 手动结束:
        1. COMMIT;  提交(确认)
        2. ROLLBACK;  回滚(取消)
    4. 事务一旦结束,就不能够再提交或者回滚
  4. 事务的特征
    1. 原子性(不可分割)
    2. 一致性(数据一致)
    3. 隔离性(互不干扰)
    4. 持久性(一旦提交,无法回滚)

DDL数据库管理

  1. 创建数据库:
    1. CREATE  DATABASE  数据库名;
    2. CREATE  DATABASE  数据库名;  判断数据库是否存在,如果存在则不创建,不存在则创建
    3. CREATE DATABASE 数据库名 CHARACTER SET 字符集  创建数据库并指定字符集

        字符集:规定了字符在数据库中的存储格式,比如占多少空间,能支持哪些字符等等

  1. 查看数据库方式:
    1. SHOW  DATABASES  查看所有的数据库
      • MySQL 8.0并初始化数据库之后,默认会创建4个系统数据库:information_schema、performance_schema、sys、mysql。这几个数据库保存MySQL正常运行的基本信息,不要轻易修改这几个数据库的信息。
    2. SHOW  CREATE  DATABASE  数据库名   查看某个数据库的定义信息
  2. 修改数据库:
    1. ALTER  DATABASE  数据库名  DEFAULT  CHARACTER  SET  字符集;  修改数据库字符集
  3. 删除数据库
    1. DROP  DATABASE  数据库名  删除后无法恢复
  4. 切换数据库
    1. SELECT DATABASE();  查看正在使用的数据库
    2. USE 数据库名   使用/切换数据库

DDL数据表的管理

  1. 数据类型:数值类型、日期和时间类型、字符串类型。
  2. Varchar和char 的区别
    1. Varchar:可变长度的字符串  varchar(5)  如果实际输入一个1符  存储占用1个字符
    2. Char:固定长度的字符串, char(5)  如果实际输入一个1符  存储占用5个字符
  3. BLOB:二进制大对象,存储数据量大
  4. TEXE:大文本类型
  5. 创建表:
    1. CREATE TABLE 表名(列名1  数据类型 ,列名2  数据类型 ,…)
  6. DESCRIBE 表名:描述表的信息,包括数据类型,约束条件等。
  7. 查看表结构:
    1. SHOW TABLES;  查看某个数据库中的所有表
    2. DESC 表名;   查看表结构
    3. SHOW CREATE TABLE 表名 查看创建表的SQL语句
  8. 复制表
    1. CREATE TABLE 表名 子查询
      • 缺陷:新建表没有子查询表的约束
    2. CREATE TABLE 新表名 LIKE 旧表名;  仅复制表结构
    3. CREATE TABLE 新表名 查询语句   同时复制表结构和数据
  9. 删除表
    1. DROP TABLE 表名   直接删除表
    2. DROP TABLE  IF  EXISTS 表名   判断表是否存在并删除表
  10. 修改表结构
    1. ALTER TABLE 表名 ADD 列名 类型    为已经存在的表添加新列
    2. ALTER  TABLE  表名  MODIFY  列名 新的类型     修改已经存在的列的数据类型
    3. ALTER TABLE 表名 CHANGE 旧列名 新列名 类型     修改列名
    4. ALTER TABLE 表名 DROP 列名;    删除列
    5. RENAME TABLE 表名 TO 新表名      修改表名
    6. ALTER TABLE 表名 character set 字符集     修改字符集
  11. 截断表:截断表的作用是把原来的表摧毁,重新创建一个结构和原来一模一样的新表
    1. TRUNCATE TABLE table;
    2. TRUNCATE和DELETE区别:
      • TRUNCATE是DDL命令,使用ROLLBACK不可以回滚。而DELETE是DML命令,使用ROLLBACK可以回滚
      • DELETE可以通过指定删除条件实现部分删除,TRUNCATE不能指定条件。

DDL约束管理

概念:定义在列上的一种强制规则。用来保证数据库中数据的正确性、有效性和完整性

  1. 主键约束:
    1. 概念:主键(PRIMARY KEY):用来唯一标识表中的一条记录,用来限制重复数据
    2. 规则:
      • 每个表都要有主键,且一个表最多只能有一个主键。
      • 2、主键所定义的列,不允许插入NULL值。
      • 3、主键是给开发人员使用的,不是给最终客户使用的
      • 往往是第一列

    1. 创建主键约束

CREATE TABLE 表名(

列名1 数据类型 PRIMARY KEY ,

列名2 数据类型 ,

);

    1. 追加主键约束

ALTER TABLE 表名 ADD PRIMARY KEY (column)

    1. 删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY

  1. 非空约束:限定某列的所有行数据不能为NULL值
  1. 创建:

CREATE TABLE 表名(

列名1  数据类型  ,

列名2  数据类型 NOT NULL,

…);

  1. 修改非空约束:ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL/NULL;
  2. 删除非空约束:ALTER TABLE 表名 MODIFY 列名 数据类型 NULL
  1. 唯一约束:唯一标识表中的一条记录的,在这张表中这个列的值不能重复
    1. 与主键约束的不同:
      • 一个表可以有多个唯一约束,但主键约束最多只能有一个。
      • 主键约束所定义的列,不允许有NULL值,而唯一约束所定义的列,允许有NULL值
    2. 创建:

CREATE TABLE 表名(

列名1 数据类型 UNIQUE,

列名2 数据类型 ,

);

或者ALTER TABLE 表名 ADD UNIQUE(列名);

    1. 删除唯一约束:ALTER TABLE 表名  DROP INDEX 列名
  1. 外键约束:限制外键所定义的列的值必须来源于引用列的值。
    1. 创建:(外键约束需要写在所有列的最后)

CREATE TABLE 表名(

列名1  数据类型  ,

列名2  数据类型 ,

…   ,

FOREIGN KEY(列名)  REFERENCES 引用列所在的表名(列名));

    1. 追加外键约束:ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY(列名) REFERENCES 引用表(引用列);  
    2. 注意:
      • 严格参考主键列
      • 外键列允许空值
      • 外键约束的引用列,必须有主键约束或者唯一约束
  1. 检查性约束:确保某个列的所有行数据都必须满足的一个条件表达式
    1. 创建:CREATE TABLE 表名(

列名1  数据类型  CHECK (条件表达式),

列名2  数据类型 ,...);

    1. 删除:ALTER TABLE 表名 DROP CONSTRAINT 约束名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值