一.SQL语句的分类:
1.DDL(数据定义语句):
操作数据库
数据定义语句,针对数据库、数据表、视图、索引执行创建和删除操作的。
- create database:创建
- alter database:修改
- drop database:删除
- show:查询
- use:切换
1.1:create:创建
1.create database 数据库名;
2.create database 数据库名 character set 编码格式;
1.2:alter:修改
修改数据库的字符集
alter database 数据库名称 character set 字符集;
1.3:drop:删除
删除数据库
drop database 数据库名;
1.4:show:查询
查询所有的数据库
1.show databases;
2.show create database 数据库名称 # 查询数据库的编码
1.5:use:切换
# 切换到当前的数据库
use 数据库名称;
# 查询当前正在使用的数据库名称
select databases();
操作数据表
- create table:创建表
- desc table:查看表结构
- show:查看数据表的创建语句
- alter table:添加、修改表
- drop table:删除
1.1:create:创建
create table 数据表名称(
字段名称 数据类型(长度),
字段名称 数据类型(长度),
........
);
1.2:desc:查看表结构
desc 数据表名称
1.3:show :查看
1.show createt table 数据表名称 # 查看表名称
2.show tables; # 查看当前数据库中所有的数据表
1.4:alter:修改
alter table 旧名称 rename 新名称;
1.5:alter:添加
1.alter table 表名称 add 列名 数据类型(长度) # 在所有的末尾添加新列
2.alter table 表名称 add 列名 数据类型(长度) after 已经存在的列 # 在指定列的后面添加新列
3.alter table 表名称 add 列名 数据类型(长度) first。 # 在第一列中添加新列
4.alter table 表名 drop 列名; # 删除列
5.alter table 表名称 modify 列名 数据类型(长度); # 只能修改数据类型
6.alter table 表名称 change 旧名称 新名称 数据类型(长度); # 可以修改类名和其他信息
将sgender修改为ssex char(2)
1.6:drop:删除:
drop table 表名称;
2.DML(数据操作语句)
- insert:添加
- update:修改
- delete:删除
2.1.insert:添加操作
单行添加:
insert into 表名 (字段名1,字段名2,字段名3....) values(值1,值2,值3);
insert into 表名 set 字段1 = 值1,字段2 = 值2,字段3 = 值3;
方式一:
字段名全写:
INSERT INTO student(sid,sname,sage,sgender,semail)
VALUES(1,'刘能',50,'男','liuneng@163.com');
省略部分字段:
INSERT INTO student(sid,sname,sgender)
VALUES(3,'王大拿','男');
省略全部字段:
INSERT INTO student VALUES(4,'谢大脚',48,'女','cunhua@163.com');
多行添加:
insert into 表名 (字段1,字段2,字段3) values(值1,值2,值3),(值1,值2,值3)….;
2.2:update:修改操作
update 表名 set 字段名=值,字段名=值… where name='刘能';
2.3delete:删除操作
delete from 表名 where name=‘张三’;
truncate table 表名
2.4:面试题
delete删除不加where 和 truncate区别?
1.删除过程不同:
delete删除逐行删除
truncate 将整张表删除,再创建一张跟原表一样的数据。
truncate 执行效率 比delete高。
2.语言意义不同:
truncate 是DDL语句,delete是DML语句
3.truncate删除的数据不能找回,delete删除后的数据可以找回
3.DCL(数据控制语言)
4.DQL(数据查询语言)
DQL(Data Query Language)数据查询语句,主要针对数据表做查询操作。不会影响表结构和表中的数据,
4.1 查询:select
-- 查询数据表中所有数据
1.select * from 表名
-- 查询指定的片段
2.select 字段,字段,字段 from 表名;
-- 按条件查询
3.select 字段,字段....from 表名 where 查询条件。
运算符:
4.2 几道例题:
between and
需求:查询英语成绩是60到80分的学生:
IN:
需求:查询英语成绩是60,70,77的学生信息
like
like用于模糊查询,查询字段是字符类型,结合通配符使用。
%:匹配0个或多个任意字符
_:匹配一个任意字符。
需求:查询刘姓学生信息:
需求:查询所有姓刘,名字带有两个字的。
is null:
判断该列是否为空:
需求:查询英语成绩为空的学生:
需求:查询英语成绩不为空的学生:
4.3:distinct:过滤去重元素
语法:select distinict 字段1,字段2 from 表名 where 条件;
4.4 as:别名
1.select 字段 as 别名,字段 as 别名 from 表名 【where 条件】
-- as也可以省略
2.select 字段 别名,字段 别名 from 表名 【where 条件】
4.5 order by:排序
-- 根据字段1进行排序,如果字段1一样,则根据字段2排序
select * from 表名 【where 条件】 order by 字段1(DESC|ASC),字段2(DESC|ASC)....
4.6 关于null 的问题:
和null相加的值结果为null如果想要结果不为null
SELECT `name`,IFNULL(chinese,0)+IFNULL(math,0)+IFNULL(english,0) FROM exam;