select查询语句执行顺序:
select 5
...
字段
...
from 1
...
表名
...
where 2
...
条件
...
group by 3
...
分组字段
...
having 4
...
二次过滤
...
order by 6
...
排序
...
limit start, size 7
...
分页
...
关系表达式查询优化原则:
内连接、外连接、交叉查询、自然连接、等值连接
- 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
3. 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
4. 左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
- 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
- 全外连接:左外连接 union 右外连接。
- 交叉查询( CROSS JOIN ):查询返回的结果是被连接的两张数据表中所有数据行的笛卡尔积。
- 自然连接:如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性B的属性集合。
- 其结果是从关系R和S的笛卡尔积中选取属性组A和B之相等的元组。
-> -> 自然连接和等值连接的区别:
- 1、自然连接一定是等值连接,但等值连接不一定是自然连接。
- 2、等值连接要求相等的分量,不一定是公共属性;而自然连接要求相等的分量必须是公共属性。
- 3、等值连接不把重复的属性除去;而自然连接要把重复的属性除去。
交叉连接的基本语法格式:
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
或
SELECT <字段名> FROM <表1>, <表2> [WHERE子句]

主键和外键约束
ALTER TABLE 从表名 ADD CONSTRAINT [ 外键名称 ] FOREIGN KEY ( 外键字段名)
REFERENCES 主表名 ( 主键字段名 ) ;
MySQL 外键约束名规则详解
外键取值范围: 是主表主键的取值范围。 比如:一张班级表:主键为班级id,班级id插入1班,2班,3班,那么你学生表中的外键就只能取值为 1班,2班,3班。
1. 外键约束名必须是唯一的
在 MySQL 中,每个外键约束名必须是唯一的。如果多个外键约束使用相同的名称,MySQL 将无法区分它们,从而导致数据完整性的问题。我们需要确保每个外键约束名都是唯一的。
2. 外键约束名不能超过 64 个字符
在 MySQL 中,外键约束名的长度不能超过 64 个字符。如果外键约束名过长,可能会导致 MySQL 在处理数据时出现性能问题。我们需要确保外键约束名的长度不超过 64 个字符。
3. 外键约束名不能包含空格或特殊字符
在 MySQL 中,外键约束名不能包含空格或特殊字符。如果外键约束名包含这些字符,MySQL 将无法正确解析它们,从而导致数据完整性的问题。我们需要确保外键约束名不包含空格或特殊字符。
4. 外键约束名应该具有描述性
在 MySQL 中,外键约束名应该具有描述性。外键约束名可以帮助我们更好地理解和维护数据库结构。我们应该尽可能使用具有描述性的名称。 在 MySQL 中,外键约束是一种非常重要的数据完整性保护机制。在使用外键约束时,我们需要注意外键约束名的命名规则,确保每个外键约束名都是唯一的、长度不超过 64 个字符、不包含空格或特殊字符,并具有描述性。通过遵守这些规则,我们可以更好地维护 MySQL 数据库的结构和完整性。
删除主键、外键约束:
主键: 外键:ALTER TABLE 表名 DROP CONSTRAINT 约束名;
时间和日期函数:
条件判断函数:
MySQL 中进行 条件判断的函数有 IF、IFNULL 和 CASE。
ALTER命令大全:
-- 修改表名 [rename to]
alter table tab_name rename to tab_new;
-- 修改字段类型(修改字段相对位置) [modify]
alter table tab_name modify field type (first/before field1);
-- 修改字段默认值/是否为空/自动增长
alter table tab_name modify field type not null/default ="未知"/auto_increment;
-- 修改字段名/字段类型! [change]
alter table tab_name change field newfield newtype;
-- 添加字段 [add]
alter table tab_name add field type (first/before field1);
-- 删除字段 [drop]
alter table tab_name drop field;
-- 添加主键!
alter table tab_name add primary key(field);
--删除主键
alter table tab_name drop primary key;
--添加外键约束 --给tab_name 中的 field列添加名为fk_name的约束绑定 x表中的主键i
alter table tab_name add constraint fk_name foreign key(field)
references x(i);
-- 删除外键约束 -- 删除约束名为 fk_name的外键约束
alter table tab_name drop foreign key fk_name;
alter table tab_name drop index index_name;
-- 设置唯一约束
alter table tab_name add constraint uq_name unique(field);
-- 设置默认值
alter table tab_name field set default "默认";
-- 删除默认值
alter table tab_name field drop default;
-- 删除唯一约束
alter table tab_name drop index uq_name;
--修改数据库表存储引擎
alter table altertable engine = myisam;
-- 查看表状态(引擎)
show table status;
show create table tab_name;
LIMIT用法:
使用LIMIT关键字的语法如下:
SELECT column1, column2, ...
FROM table_name
LIMIT offset, count;
LIMIT [位置偏移量,] 开始行数
返回前n行记录:
SELECT column1, column2, ...
FROM table_name
LIMIT n;
返回从第m行开始的n行记录:
SELECT column1, column2, ...
FROM table_name
LIMIT m, n;
eg:
前10条记录:
SELECT * FROM 表名 LIMIT 0,10;
或者
SELECT * FROM 表名 LIMIT 10;
第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;
第21至30条记录:
SELECT * FROM 表名 LIMIT 20,10;
数据库授权语句:
数据库常用函数:
数据库运算符辨析:
MySQL中的不等于运算符有两种写法,分别是!=和<>。
错误辨析:
- OR关键字和AND关键字,可以一起使用,需要注意,AND的优先级高于OR。√
- 在两个具有主外关联关系的表中删除数据时,一定要先删除从表中的数据,然后再删除主表中的数据,否则会报错。√
- ALL关键字实现的子查询,返回的结果需同时满足所有内层查询条件。√
- “LIMIT 4 OFFSET 3”和“LIMIT 4,3”返回的结果相同。×
- 如果要匹配的字符串中有%和_,那么可以在匹配的字符串中使用转义字符(“\”)对%和_进行转义,如“%”匹配百分号字面值。 √
- eg:
- 查询名字中带有‘_’(下划线)的数据:
- select name from t_students where name like '%_%';
- 查询名字带有‘%’的数据
- select name from t_students where name like '%%%';
填空重点:
- 查询student表中的gender字段值,如果gender字段的值为“女”则返回1,如果不为“女”则返回0,SQL语句为【SELECT id,if(gender=’女’,1,0)FROM student;】
- 内连接查询基本语法格式是【SELECT 查询字段 FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段 = 表2.关系字段;】。
- 现有一张表score记录所有学生数学和英语的成绩,表中字段有学号,姓名,学科,分数。统计总分小于120分的学生的SQL语句为【SELECT 学号FROM score GROUP BY 学号 HAVING SUM(分数)<120; 】
- 在WHERE子句中,关系运算符“<>”与关系运算符【!=】等价