目录
1.between ... and ...(在....之间)
通过一学期对专业课数据库原理及应用的学习,今天特此总结一下SQL语句,重点是对要用SQL语句实现的句子提供多种不同的语句,希望对你有帮助!!特别对于初学者朋友,看完后你的数据库语言编程这块肯定会有大的提升!!!
数据定义语言(DDL)
一.对数据库的操作
--1.1创建数据库
create database MyDatabase;
--1.2判断数据库是否已经存在,若存在则不创建,不存在创建,语句更为严谨
create database if not exists MyDatabase ;
--2.查看所有创建的数据库
show databases;
--3.查看指定数据库的·定义信息
show create database MyDatabase;
--4删除数据库
drop database MyDatabase;
二.对数据表的操作
--1.创建数据表
create table Student(
SNO char(10)primary key, --[primary key] 为设置主键
[Name] char(20)not null, -- [not null] 为属性列的值不能为空
Sex char(2) check(Sex = '男' or Sex = '女'),--[check] 起限制,约束作用,例如性别男和女,分数0到100分
birthday char(20),
Major char(20),
Dept char(20),
Number char(10))
--2.查看表的结构
desc 表名;
--3.修改表名
alter table 表名 rename to 新的表名;
--4.添加一列
alter table 表名 add 列名 数据的类型; --(注意,此处所添加的咧属性是默认可以为空值的null)
--5.添加多列
alter table 表名 add 列名 数据的类型,
列名 数据的类型,
列名 数据的类型;
--6.删除一列
alter table 表名 drop 列名;
--7.删除多列
alter table 表名 drop 列名,
列名,
列名,
列名;
----8.删除表
drop table 表名;
--9.判断表是否已经存在,若存在才删除,语句更为严谨
drop table if exists 表名;
数据操作语言(DML)
一.添加 insert into
--1.规范书写
insert into 表名(列名1,列名2,...) values(值1,值2,,...);
--2.省略列名时,默认所有列都添加,下面两个句子表达意思相同
insert into 表名 values(值1,值2,,...,值n);--省略列名
insert into 表名(列名1,列名2,...,列名n) values(值1,值2,,...,值n);--此为写全了所有列名
--3.插入部分数据时
insert into 表名(列名2,列名3,,列明5) values(值2,值3,值5);
--4.插入多行数据时 两种写法 注意标点符号 明显第二种较为简单
insert into 表名()values();
values();
values();
insert into 表名()values(),
(),
(),
();
二.删除 delete
--1.规范书写
--delete 作用仅是删除表中的数据,对表体,列属性名无任何影响
delete from 表名 where 列名 = 值;
--2.删除表中所有数据 这里表体仍存在,是空表,表仍能查询到
delete from 表名 ;--如果不是想删除所有数据,切记加where,不然表中数据全删除完了,小编就吃过亏,慎用
--3.先删除表,再创建一张一样的表
truncate table 表名;
三.修改 update
--规范书写
update 表名 set 列名 = 值 where 列名 = 值;
--代码中第一个【列名 = 值】 为想要修改的所在列的值
--代码中第二个【列名 = 值】 的列名为具有标识的作用如主键,其值唯一。非主键也行,看具体修改的目的
数据查询语言(DQL)
一.查询 select
--查询表中所有数据 (行列无限制,全部输出)
select * from 表名;
--查询表中某几列数据(行全部输出)
select 列名1,列名3 from 表名;
--查询特定列名的几行数据 (列全部输出)
select * from 表名 where 列名 = 值;
--查询特定列名的几行数据 (行列都有限制)
select 列名2,列名4 from 表名 where 列名 = 值;
二.关键字
1.between ... and ...(在....之间)
between 值 and 值:寻找在…之间的值。
not between 值and值:寻找不再…之间的值。这些值可以是数值、文本或者日期。
--查询年龄大于等于18,小于等于20的学生(三种写法,结果一样)
SELECT * FROM student WHERE Age>=20 AND Age<=30;
SELECT * FROM student WHERE Age<=20 && Age<=30;
SELECT * FROM student WHERE BETWEEN 20 AND 30;
--查询年龄不在18到20的学生(三种写法)
SELECT * FROM student WHERE Age<20 AND Age>30;
SELECT * FROM student WHERE Age<20 && Age>30;
SELECT * FROM student WHERE NOT BETWEEN 20 AND 30;
2.in, exists
1.in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,
然后按照条件进行筛选。
2.exists在查询的时候,首先会执行外循环,外循环返回的结果每一行都会拿着去内层循环执行(此时注意,内层也是循环查询的)。
-查询选修了课程的学生全部信息 S(学生表) SC(学生选课表)
SELECT *
FROM S
WHERE SNO IN(SELECT SNO
FROM SC)
SELECT *
FROM S
WHERE EXISTS(SELECT SNO
FROM SC
WHERE S.SNO = SC.SNO)
--查询没有选修任何课程的学生全部信息 S(学生表) SC(学生选课表)
SELECT *
FROM S
WHERE SNO NOT IN(SELECT SNO
FROM SC
WHERE S.SNO = SC.SNO)
SELECT *
FROM S
WHERE NOT EXISTS(SELECT SNO
FROM SC
WHERE S.SNO = SC.SNO)
3.check
CHECK 约束:用于限制列中的值的范围。
在一些情况下,我们需要字段在指定范围的输入,
例如:性别只能输入 '男'或者'女',余额只能大于0,分数在0到100分之间。
这时候就可以用 CHECK 约束 来规范数据。
接下来我们来看看它都可以在哪用。
1.创建表的时候
2.表已经存在的时候,还想修改时。
4.pirmary key(主键)
pirmary key(主键),
用于唯一标识表中的每一条数据。
不能重复, 不能为空。
一个表只能有一个主键。
接下来我们来看看它都可以在哪用。
1.创建表的时候
第一种
第二种
2.表已经存在且无主键,想要添加主键时
3.表已经存在且有主键,想要删除主键时
上面代码中的约束名在这里,右键点击复制即可
5.foreign key(外键)
外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.
外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)。
1.创建表的时候
2.表已经存在,想要添加外键时
注意:主从表的字段要具备相同的数据类型,字符长度和约束哦!!!
3.表已经存在,想要删除外键时
删除外键和前面的删除主键是一样的
6.null ,not null
null 和 not null 可以称为数据类型的属性,可以修饰限制列属性,null值也不等同于空值,空值是不占用存储空间的,null占用存储空间。
is null 和 is not null 是运算符,(注意不能写成 =null 或 !=null)查询某字段为空时用 is null,
不为空时用 is not null。
接下来我们来看看它都可以在哪用。
7.distinct
distinct 去重,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用。
8.having
HAVING语句通常与GROUP BY子句及聚集函数COUNT,AVG,SUM,MAX,MIN语句联合使用,用来过滤由GROUP BY语句返回的记录集,通常跟在GROUP BY后边作用相当于WHERE。
9.as
起别名
select 字段 as 别名 from 表名
select SNO as 学号 from Student
三.排序查询 order by
order by 用于排序,默认是按照升序排序。
order by 列名 desc --[desc] 表示降序
order by 列名 asc --[asc] 表示升序
--查找所有学生的全部信息,按年龄降序排列
select *
from S
order by Age desc
四.分组查询 group by
用法:用于分组,一般用于与聚合函数进行分组聚合(求和、统计等)。
--按照年龄分组并计算每个年龄段的平均成绩
SELECT Age, AVG(Score)
FROM students
GROUP BY Age;
--按照性别和年龄分组并计算每个年龄段不同性别的平均成绩
SELECT Gender, Age, AVG(Score)
FROM students
GROUP BY Gender, Age;
五.聚合函数
将一列数据作为一个整体进行计算,通常和分组查询函数group by组合使用。
1.count() 计算列数
2.max() 计算列最大值
3.min() 计算列最小值
4.sum() 对列进行求和
5.avg() 对列计算平均数
六.模糊查询 like
like模糊查询,支持%和下划线匹配,%匹配多个字符,_下划线:任意一个字符。
示例:
--1、查询名字中含有李的学生信息
select * from student where sname like ‘%李%’;
--2、查询名字以刘开头的学生信息
select * from student where sname like ‘刘%’;
--3、查询名字以玮结尾的学生信息
select * from student where sname like ‘%玮’;
--4、查询名字中第二个字为雨的学生信息
select * from student where sname like ‘_雨%’;
--5、查询名字中第三个字为思的学生信息
select * from student where sname like ‘__思%’;