SQL语句
1.什么是 SQL
2.SQL 作用
3.SQL语句分类
4.MySQL 的语法
5.SQL语言操作数据库
5.1 创建数据库

-- 直接创建数据库 db1 create database db1; -- 判断是否存在,如果不存在则创建数据库 db2 create database if not exists db2; -- 创建数据库并指定字符集为 gbk create database db3 default character set gbk;
-- 查看所有的数据库 show databases; -- 查看某个数据库的定义信息 show create database db3; show create database db1;
5.3 修改数据库

-- 将 db3 数据库的字符集改成 utf8 alter database db3 character set utf8;
5.4 删除数据库

-- 删除 db2 数据库 drop database db2;

-- 查看正在使用的数据库 select database(); -- 改变要使用的数据库 use db4;
6.SQL语言操作数据库表
6.1 创建表

-- 创建 student 表包含 id,name,birthday 字段 create table student ( id int, -- 整数 name varchar(20), -- 字符串 birthday date -- 生日,最后没有逗号 );
-- 创建一个 s1 的表与 student 结构相同 create table s1 like student; desc s1;
6.2 MySQL 数据类型
1.int:整数类型
2.double:浮点类型
3.date:日期,只包含年月日,yyyy-MM-dd
4.datetime:日期,包含年月日时分秒,yyyy-MM-dd HH-mm-ss
5.varchar:字符串 varchar(20):姓名最大20个字符

6.3 查看表

-- 查看 day21 数据库中的所有表 use day21; show tables; -- 查看 student 表的结构 desc student; -- 查看 student 的创建表 SQL 语句 show create table student;
6.4 删除表

-- 直接删除表 s1 表 drop table s1; -- 判断表是否存在并删除 s1 表 drop table if exists s1;
6.5 插入数据

-- 插入所有的列,向学生表中 insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男'); insert into student (id,name,age,sex) values (2, '孙悟天', 16, '男'); -- 插入所有列 insert into student values (3, '孙悟饭', 18, '男', '龟仙人洞中'); -- 如果只插入部分列,必须写列名 insert into student values (3, '孙悟饭', 18, '男'); select * from student;
注意:
*列名和值要一一对应
*如果表名后面不定义列名,则默认给所有列添加值:
insert into 表名 values(值1,值2,……值n);
*除了数字类型,其他类型需要使用引号(单双都可以)
8.数据库的查询
8.1 语法:
select -字段列表
from -表名列表
where -条件列表
group by -分组字段
having -分组之后的条件
order by -排序
limit -分页限定
1.多个字段的查询
select 字段名1,字段名2,……from 表名;
-注意: -如果查询所有字段,则可以使用*来替代字段列表
2.去除重复:
-distinct
3.计算列:
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
-ifnull(表达式1, 表达式2):null参与的运算,计算结果都为null
*表达式1:哪个字段需要判断是否为null
*如果该字段为null后的替换值
4.起别名:
as: as也可以省略

8.2 条件查询

--查询年龄大于20岁: select * from student3 where age > 20; --查询年龄等于20岁: select * from student3 where age = 20; --查询年龄不等于20岁: select * from student3 where age != 20; select * from student3 where age <> 20; --查询年龄大于等于20,小于等于30: select * from student3 where age >= 20 && age <= 30; select * from student3 where age >= 20 and age <= 30; select * from student3 where age between 20 and 30; --查询年龄22岁,18岁,25岁的信息: select * from student3 where age= 22 or age = 18 or age = 25; select * from student3 where age in (22, 18, 25); --查询英语成绩为null select * from student3 where english = null; (不对,null值不能使用 = (!=) 判断) select * from student3 where english is null; --查询英语成绩不为null select * from student3 where english is not null; --查询姓马的有哪些?(like) select * from student3 where name like ‘马%’; --查询第二个字是‘化’的人 select * from student3 where name like “_化%”; --查询姓名是3个字的人 (几个字就写几个下划线) select * from student3 where name like “___”; --查询姓名中包含‘德’的人 select * from student3 where name like ‘%德%’;
8.3 排序查询

8.4 聚合函数

注意:
聚合函数的计算,排除null值
解决方案:
1.选择不包含非空的列进行计算
2.ifnull函数
8.5 分组查询

-- 按照性别分组,分别查询男,女同学的平均分 select sex, avg(math) from student3 group by sex; --按照性别分组,分别查询男,女同学的平均分,人数 select sex, avg(math), count(id) from student3 group by sex; --按照性别分组,分别查询男,女同学的平均分,人数 (要求:分数低于70分的人,不参与分组) select sex, avg(math), count(id) from student3 where math >70 group by sex; --按照性别分组,分别查询男,女同学的平均分,人数 (要求:分数低于70分的人,不参与分组,且分组之后要大于2个人) select sex, avg(math), count(id) from student3 where math >70 group by sex having count(id) > 2;
9. 约束
概念:对表中的数据进行限定,从而保证数据的正确性,有效性,和完整性。
分类:
1.主键约束:primary key
2.非空约束:not null
3.唯一约束:unique 值不能重复
4.外键约束:foreign key
主键约束:primary key


非空约束:not null

唯一约束:unique 值不能重复

外键约束:foreign key



CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(32), dep_location VARCHAR(32) ); INSERT INTO department VALUE(NULL, '研发部', '广州'),(NULL, '销售部', '深圳'); CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(32), age INT, dep_id INT, -- 员工所在部门 CONSTRAINT emp_department FOREIGN KEY (dep_id) REFERENCES department(id) -- 重点 ); INSERT INTO employee(NAME, age, dep_id) VALUE('张三', 20, 1); INSERT INTO employee(NAME, age, dep_id) VALUE('李四', 21, 1); INSERT INTO employee(NAME, age, dep_id) VALUE('王五', 20, 1); INSERT INTO employee(NAME, age, dep_id) VALUE('老王', 20, 2); INSERT INTO employee(NAME, age, dep_id) VALUE('大王', 22, 2); INSERT INTO employee(NAME, age, dep_id) VALUE('小王', 18, 2);

10. 外连接



11. 子查询





浙公网安备 33010602011771号