赞
踩
目录
数据库约束是用于保证数据完整性和一致性的重要机制,它可以应用在表的列级别或表级别。以下是常见的数据库约束类型:
示例:
- CREATE TABLE STUDENT (
- id INT PRIMARY KEY,
- name VARCHAR(20),
- qq_mail VARCHAR(20)
- );
- //设定学生表中的id字段为外键
示例:
- CREATE TABLE student (
- id INT UNIQUE,
- name VARCHAR(20),
- qq_mail VARCHAR(20)
- )
- //将学生表中的id字段设置为unique,表示为唯一的、不重复的
语法:
foreign key (字段名) references 主表(列)
- create table class(
- id int primary key,
- class_name varchar(20),
- );
- //先创建一个班级表class,使id为主键
-
- create table class(
- id int primary key,
- name varchar(20),
- classes_id int,
- foreign key (classes_id) references class(id)
- );
- //再创建一个学生表,使用id为主键,classes_id为外键,关联班级表id
示例:
- CREATE TABLE Grades (
- StudentID INT,
- Score INT CHECK (Score >= 0 AND Score <= 100)
- );
- //在一个学生成绩表中,使用检查约束确保分数在0到100之间
示例:
- CREATE TABLE Employees (
- EmployeeID INT,
- Name VARCHAR(50),
- HireDate DATE DEFAULT CURRENT_DATE
- );
- //在一个员工表中,将入职日期设置为当前日期作为默认值
6.非空约束 (Not Null):
示例:
- CREATE TABLE Users (
- UserID INT,
- Username VARCHAR(50) NOT NULL
- );
- //在一个用户表中,确保用户名不为空
示例:
- select avg(math) from student;
- //计算学生表数学成绩的平均值
-
- select sum(math) from student;
- //计算学生表数学成绩的总和
-
- select max(math) from student;
- //计算学生表数学成绩的最大值
将结果集按照指定列进行分组,并对每个分组应用聚合函数。
语法:
select column1, sum(column2), .. from table group by column1,column3;
示例:
- create table student (
- id int,
- name varchar(20),
- grade varchar(5),
- math decimal(3,1),
- chinese decimal(3,1),
- english decimal(3,1)
- );
- //先创建一个学生表
-
- select grade 年级,max(math+chinese+english) 总分 from student group by grage;
- //查询每个年级的最高分并以年级分组
- (有多少年级就分成多少组,每一个组当成单独的一张表并查询其中的最高分)
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING
示例:
- create table student (
- id int,
- name varchar(20),
- grade varchar(5),
- math decimal(3,1),
- chinese decimal(3,1),
- english decimal(3,1)
- );
- //先创建一个学生表
-
- select grade 年级, count(*) 总人数
- from student
- group by grade
- having count(*)>200;
- //查找总人数超过200的年级
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
在介绍之前,先创建好要示例的表:
- create table student (
- -> id int ,
- -> name varchar(30),
- -> e_mail varchar(30),
- -> class_id int
- -> );
- //创建学生表用于储存学生个人信息
- create table grade(
- -> course varchar(20),
- -> student_id int,
- -> score int
- -> );
- //创建成绩表用于储存学生的各科成绩
填充数据后为
INNER JOIN
或简写形式 JOIN
。语法:
- select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
-
- select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
-
- //两种写法都可以
示例:
- select
- student.name,
- grade.course,
- grade.score
- from
- student,
- grade
- where
- student.id=grade.student_id;
-
- //查询学生的姓名与对应的课程名称和成绩
- //注意限定条件是学生表的id与成绩表的student_id相等
结果为:
LEFT JOIN
。语法:
select 字段名 from 表名1 left join 表名2 on 连接条件;
示例:
我们先往学生表添加一个新的学生小何,但是成绩表没有添加对应的成绩
- insert into
- student (name,id,class_id)
- values
- ('小何',7,2);
接着查询学生表左连接成绩表
- select
- student.name,
- grade.course,
- grade.score
- from
- student left join grade
- on
- student.id=grade.student_id;
结果为:
可以看到,小何明明没有成绩也出现在结果中了,这就是左连接保留左表多余的数据
RIGHT JOIN
。语法:
select 字段 from 表名1 right join 表名2 on 连接条件;
示例:
与上方一样添加学生小何,但是查询成绩表右连接学生表
- select
- student.name, grade.course, grade.score
- from
- grade right join student
- on
- student.id=grade.student_id;
结果为:
可以看到,将两表调换后,小何明明没有成绩也出现在结果中了,这就是右连接保留右表多余的数据
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
示例:
如果现在想寻找与小明同班的同学
- select
- *
- from
- student
- where
- class_id=(select class_id from student where name='小明');
结果为:
MySQL中的合并查询指的是使用UNION
或UNION ALL
操作符将多个SELECT
语句的结果合并成一个结果集。合并查询通常用于将多个相似的查询结果合并在一起,以便在单个结果集中检索数据
UNION
操作符:
UNION
操作符用于合并多个SELECT
语句的结果,并去除重复的行。
- SELECT column1 FROM table1
- UNION
- SELECT column1 FROM table2;
UNION ALL
操作符:
UNION ALL
操作符用于合并多个SELECT
语句的结果,包括重复的行。
- SELECT column1 FROM table1
- UNION ALL
- SELECT column1 FROM table2;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。