1.列约束

(1)主键约束——PRIMARY KEY

(2)非空约束——NOT NULL

声明了非空约束的列上,不允许使用NULL

(3)唯一约束——UNIQUE

声明了唯一约束的列上不能插入重复的值,允许插入NULL,而且允许插入多个NULL

(4)默认值约束——DEFAULT

可以使用DEFAULT关键字声明默认值,有两种使用方式

INSERT INTO laptop VALUES(1, DEFAULT,…);

INSERT INTO laptop(lid,price) VALUES(2,3000); 给特定的列插入值,其它的列全部使用默认值

练习:设置笔记本分类表中,笔记本的数量默认值为1,使用两种方式插入数据。

(5)检查约束——CHECK

检查约束可以对插入的数据进行自定义的验证

CREATE  TABLE  student(

score TINYINT CHECK(score>=0 AND score<=100)

);

Mysql不支持检查约束,会降低数据的插入速度

(6)外键约束——FOREIGN KEY

声明了外键约束的列上,取值必须在另一个表主键列上出现过,两者的列类型保持一致,允许使用NULL。

FOREIGN KEY(列) REFERENCES 数据表(主键列)

2.自增列

AUTO_INCREMENT: 自动增长,假如一个列声明了自增列,无需手动赋值,赋值为NULL,会自动获取当前的最大值,然后加1插入。

注意事项:

只适用于整数型的主键列

允许手动赋值

练习:编写脚本文件01_tedu.sql,创建数据库tedu,进入该数据库

创建保存部门数据的表dept,包含(did, dname)

10 研发部   20 市场部   30 运营部   40 测试部

创建保存员工数据的表emp,包含(eid,ename,sex,birthday,salary工资,deptId 所属部门编号)

插入15条数据

3.简单查询

(1)查询特定的列

示例: 查询所有员工的姓名、性别

SELECT ename,sex FROM emp;

练习: 查询所有员工的编号、姓名、生日、工资

SELECT eid,ename,birthday, salary FROM emp;

(2)查询所有的列

SELECT * FROM emp;

SELECT eid,ename,sex,birthday,salary,deptId FROM emp;

(3)给列起别名

示例:查询所有员工的姓名和工资,使用汉字别名

SELECT ename AS 姓名,salary AS 工资 FROM emp;

练习:查询所有员工的编号,姓名,性别,生日,使用汉字别名

SELECT eid AS 编号,ename AS 姓名,sex 性别,birthday 生日 FROM emp;

练习:查询所有员工的编号和姓名,使用一个字母别名

SELECT eid a,ename b FROM emp;

在起别名的时候,AS关键字是可以省略的,保留空格

(4)显示不同的记录/合并相同的项

示例:查询出公司都有哪些性别的员工

SELECT DISTINCT sex FROM emp;

练习:查询出员工都分布在哪些部门

SELECT DISTINCT deptId FROM emp;

(5)查询时执行计算

示例:2+3-5*4.2/8.8+13

SELECT 2+3-5*4.2/8.8+13;

练习:查询所有员工的姓名及其年薪

SELECT ename,salary*12 FROM emp;

练习:假如每个员工的工资增加500,年终奖5000,查询出所有员工的姓名及其年薪,给列使用汉字别名。

SELECT ename 姓名,(salary+500)*12+5000 年薪 FROM emp;

(6)查询结果集排序

示例:查询所有的部门,结果集按照部门编号升序排列

SELECT * FROM dept ORDER BY did ASC; #ascendant

示例:查询所有的部门,结果集按照部门编号降序排列

SELECT * FROM dept ORDER BY did DESC;#descendant

练习:查询所有的员工,结果集按照工资降序排列

SELECT * FROM emp ORDER BY salary DESC;

练习:查询所有的员工,结果集按照工资升序排序

SELECT * FROM emp ORDER BY salary ASC;

练习:查询所有的员工,结果集按照年龄从小到大排序

SELECT * FROM emp ORDER BY birthday DESC;

练习:查询所有的员工,结果集按照姓名升序排序

SELECT * FROM emp ORDER BY ename;

练习:查询所有的员工,结果集按照工资降序排列,如果工资相同,按照姓名排序

SELECT * FROM emp ORDER BY salary DESC,ename;

练习:查询所有的员工,结果集按照性别升序排列,如果性别相同,按照生日降序排列

SELECT * FROM emp ORDER BY sex,birthday DESC;

ORDER BY 可以按照数值、日期时间、字符串排序

默认是升序排列(ASC)

(7)条件查询

示例:查询出编号为5的员工

SELECT * FROM emp  WHERE eid=5;

练习:查询出姓名为King的员工的编号,姓名,生日,工资

SELECT eid,ename,birthday,salary FROM emp WHERE ename='king';

练习:查询出20号部门下的员工,结果集按照工资降序排列

SELECT * FROM emp WHERE deptId=20 ORDER BY salary DESC;

练习:查询工资在5000以上的员工有哪些

SELECT * FROM emp WHERE salary>=5000;

比较运算符:>  <  >=  >=  =  !=(不等于)

练习:查询出1991-1-1后出生的员工有哪些

SELECT * FROM emp WHERE birthday>'1991-1-1';

练习:查询出不在10号部门的员工有哪些

SELECT * FROM emp WHERE deptId!=10;

练习:查询出没有明确部门的员工

SELECT * FROM emp WHERE deptId IS NULL;

练习:查询出有明确部门的员工

SELECT * FROM emp WHERE deptId IS NOT NULL;

练习:查询出工资在6000以上的男员工有哪些

SELECT * FROM emp WHERE salary>=6000 AND sex=1;

练习:查询出工资在6000以上和8000以下的所有员工

SELECT * FROM emp WHERE salary>=6000 AND salary<=8000;

SELECT * FROM emp WHERE salary BETWEEN 6000 AND 8000;

练习:查询出工资在6000以下以及8000以上的员工 OR

SELECT * FROM emp WHERE salary<6000 OR salary>8000;

SELECT * FROM emp WHERE salary NOT BETWEEN 6000 AND 8000;

练习:查询出1990年之前以及1993年之后出生的员工

SELECT * FROM emp WHERE birthday<'1990-1-1' OR birthday>'1993-12-31';

SELECT * FROM emp WHERE birthday NOT BETWEEN '1990-1-1' AND '1993-12-31';

练习:查询出1993年出生的员工有哪些

SELECT * FROM emp WHERE birthday>='1993-1-1' AND birthday<='1993-12-31';

SELECT * FROM emp WHERE birthday BETWEEN '1993-1-1' AND '1993-12-31';

练习:查询出20号和30号部门的员工有哪些

SELECT * FROM emp WHERE deptId=20 OR deptId=30;

SELECT * FROM emp WHERE deptId IN(20,30);

练习:查询出不在20号和30号部门的员工

SELECT * FROM emp WHERE deptId NOT IN(20,30);

WHERE

AND / OR

(NOT) BETWEEN  AND

IS (NOT) NULL

(NOT) IN()

(8)模糊条件查询

示例:查询出姓名中含有字母e的员工

SELECT * FROM emp WHERE ename LIKE '%e%';

练习:查询出姓名中以e结尾的员工

SELECT * FROM emp WHERE ename LIKE '%e';

练习:查询出姓名中倒数第2个字符为e的员工

SELECT * FROM emp WHERE ename LIKE '%e_';

%  任意多个字符   >=0

_   任意一个字符   =1

以上两个字符要结合LIKE关键字使用

(9)分页查询

假如查询的结果集有太多的数据,一次显示不完,可以分页显示。

需要有两个条件:当前的页码、每页的数据量

开始的值 = (当前的页码-1)*每页的数据量

SELECT * FROM emp LIMIT start,count;

start: 开始的值

count: 每页的数据量

假如每页显示5条记录

第1页:SELECT * FROM emp LIMIT 0,5;

第2页:SELECT * FROM emp LIMIT 5,5;

第3页:SELECT * FROM emp LIMIT 10,5;

第4页:SELECT * FROM emp LIMIT 15,5;

第5页:SELECT * FROM emp LIMIT 20,5;

练习:假如每页显示6条记录,写出查询前3页的SQL语句

SELECT * FROM emp LIMIT 0,6;

SELECT * FROM emp LIMIT 6,6;

SELECT * FROM emp LIMIT 12,6;

注意: LIMIT后的两个值必须是数值型。

二.复合查询

(1)聚合查询/分组查询

示例:查询出所有员工的数量

SELECT COUNT(eid) FROM emp;

使用员工的部门编号计算员工数量

SELECT COUNT(deptId) FROM emp;

SELECT COUNT(*) FROM emp; #推荐写法

聚合函数

函数:是一个功能体,提供若干个数据,产出结果。——饺子机

COUNT总数量/SUM总和/AVG平均/MAX最大/MIN最小

练习:计算所有员工的工资总和

SELECT SUM(salary) FROM emp;

练习:查询出男员工的平均工资

SELECT SUM(salary)/COUNT(*) FROM emp WHERE sex=1;

SELECT AVG(salary) FROM emp WHERE sex=1;

练习:查询出女员工最高工资是多少

SELECT MAX(salary) FROM emp WHERE sex=0;

练习:查询出男员工最低工资是多少

SELECT MIN(salary) FROM emp WHERE sex=1;

分组查询:只能查询分组条件和聚合函数

示例:查询出男女员工的最高工资

SELECT sex,MAX(salary) FROM emp GROUP BY sex;

练习:查询出每个部门年龄最大的人和年龄最小的人

SELECT deptId,MIN(birthday),MAX(birthday) FROM emp GROUP BY deptId;

year()   获取日期中的年份

month() 获取日期中的月份

练习:查询出1991年出生的员工有哪些

SELECT * FROM emp WHERE YEAR(birthday)=1991;

练习:查询出3月份出生的员工有哪些

SELECT * FROM emp WHERE MONTH(birthday)=3;

(2)子查询

把一个SQL语句的结果作为另一个SQL语句的查询条件

示例: 查询出研发部所有的员工有哪些

步骤1: 查询出研发部的部门编号——10

SELECT did FROM dept WHERE dname='研发部';

步骤2:查询出研发部的员工

SELECT * FROM emp WHERE deptId=10;

综合:

SELECT * FROM emp WHERE deptId=( SELECT did FROM dept WHERE dname='研发部');

练习:查询出比tom工资高的员工有哪些

步骤1:查询出tom的工资——6000

SELECT salary FROM emp WHERE ename='tom';

步骤2:查询出工资比tom高的员工

SELECT * FROM emp WHERE salary>6000;

综合:

SELECT * FROM emp WHERE salary>( SELECT salary FROM emp WHERE ename='tom');

练习:查询出和tom同一年出生的员工有哪些

步骤1:获取tom的年份——1990

SELECT YEAR(birthday) FROM emp WHERE ename='tom';

步骤2:查询1990年出生的员工

SELECT * FROM emp WHERE YEAR(birthday)=1990;

综合:

SELECT * FROM emp WHERE YEAR(birthday)=(

SELECT YEAR(birthday) FROM emp WHERE ename='tom'

);

(3)多表查询

示例:查询出所有的员工姓名及其部门名称

SELECT ename,dname FROM emp,dept;

产生:笛卡尔积

解决方法:添加查询条件

SELECT ename,dname FROM emp,dept WHERE deptId=did;

无法查询出没有部门的员工,也无法查询出没有员工的部门

MySQL的列约束的更多相关文章

  1. MySQL学习笔记——约束

    1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性. 2.当表中数据有相互依赖性时,可以保护相关的数据不被删除. 3.大部分数据库支持下面五类完整性约束: - NOT NULL非空 ...

  2. mysql 加入列,改动列,删除列。

    MySQL 加入列,改动列,删除列 ALTER TABLE:加入,改动,删除表的列,约束等表的定义. 查看列:desc 表名; 改动表名:alter table t_book rename to bb ...

  3. MySQL之外键约束

    MySQL之外键约束 MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: [CONSTRAINT [symbo ...

  4. Mysql表的约束设计和关联关系设计

    https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...

  5. mysql 外键约束及表关联

    一.MYSQL中的约束 1.主键:primary key 唯一非空的特性并且可以优化查询速度 2.外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性 3.唯一:un ...

  6. MySql中的约束

    mysql中的约束使用和oracle使用差别不大. 1.主键约束 如同人对应身份证,主键能够唯一地标识表中的一条记录,可以结合外键来定义数据表之间的关系. 主键约束要求主键列的数据唯一,并且不允许为空 ...

  7. 数据库-SQL语句:删除和修改语句-列类型-列约束

    使用MySQL客户端连接服务器的两种方式: (1)交互模式: ——查 mysql.exe  -h127.0.0.1  -uroot  -p mysql   -uroot (2)脚本模式:——增删改 m ...

  8. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  9. mysql FOREIGN KEY约束 语法

    mysql FOREIGN KEY约束 语法 作用:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. DD马达 说明:FOREIGN KEY 约束用于预防破坏表之间连接的 ...

随机推荐

  1. 通过transmittable-thread-local源码理解线程池线程本地变量传递的原理

    前提 最近一两个月花了很大的功夫做UCloud服务和中间件迁移到阿里云的工作,没什么空闲时间撸文.想起很早之前写过ThreadLocal的源码分析相关文章,里面提到了ThreadLocal存在一个不能 ...

  2. 写给Java程序员的Java虚拟机学习指南

    大家好,我是极客时间<深入拆解Java虚拟机>作者.Oracle Labs高级研究员郑雨迪.有幸借这个专题的机会,能和大家分享为何Java工程师要学Java虚拟机?如何掌握Java虚拟机? ...

  3. 《SQL初学者指南》——第1章 关系型数据库和SQL

    第1章 关系型数据库和SQL SQL初学者指南在本章中,我们将介绍一些背景知识,以便于你能够很快地上手,能在后续的章节中编写SQL语句.本章有两个主题.首先是对本书所涉及到的数据库做一个概述,并且介绍 ...

  4. Linux 上搭建 Snort+BASE 入侵检测系统

    配置实验环境 由于本人电脑的存储空间不足,无法再承担安装一个虚拟机的开销,因此在阿里云上申请了一个云服务器进行本次实验.服务器配置如下: 1 核 - 2GB 内存 - 40GB 系统盘 操作系统:Ub ...

  5. 题目分享T

    题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...

  6. JavaScript toFixed() 实现四舍五入保留两位小数

    const num = 18.186; let result; result = num.toFixed(2) console.log(result) // 18.19 注意,返回值为String类型

  7. win10 手动安装mysql-8.0.11-winx64.zip

    0.彻底删除win10上安装的mysql(转载 : https://www.cnblogs.com/jpfss/p/6652701.html) 1.去官网下载mysql-8.0.11-winx64.z ...

  8. Java笔记(day13)

    多线程: 进程:正在进行中的程序(直译) 线程:执行路径,就是进程中负责程序执行的控制单元(执行路径): 一个进程中可以多个路径,称为多线程 一个进程至少一个线程 每一个线程都有自己运行的内容,这个内 ...

  9. POJ3734(矩阵快速幂)

    \(假设现在到第i个积木\) \(红绿恰都是偶数a种方案,恰都是奇数为b种方案,一奇一偶为c种方案\) \(由此考虑i+1个积木的情况\) Ⅰ.一奇一偶的方案 \(如果第i层恰是奇数的情况,那么本次只 ...

  10. I - Union 2019ccpc女生赛

    I - Union 这是2019女生赛最难的一个题目,但是现在去写,我觉得没有想象之中的那么难. 把这个题目分成几个部分来考虑. 假设给你k个数,让你分成三个集合,满足这四个条件,且不需要考虑时间和空 ...