一、SQL概述
SQL是什么?
Structured Query Language:结构化查询语言
SQL分为四类
DQL(数据查询语言)
用来查询数据库中的数据,包括select等
DML(数据操作语言)
插入、删除和修改数据库中的数据,包括insert,update,delete等
DDL(数据定义语言)
用来建立数据库、数据库对象和定义表的列,包括create,drop,alter等
DCL(数据控制语言)
用来控制存取许可、存取权限等,包括grant,revoke,commit,rollback等
这里采用的分类方法采用的是ANSI SQL的标准。 DML : Data Manipulation Language DCL : Data Control Language DQL : Data Query Language DDL : Data Definition Language
运算符
运算符:一种符号,它是用来进行列间或者变量之间的比较和数学运算的
运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符 

注释
-- 这个注释直到该行结束(注意--后有空格)#这个注释直到该行结束/*这是行中间的注释*//*这是多行的注释这是多行的注释*/
二、DML
单行插入
语法insert into 表名 [(列名,…)] values(值,…)
示例:
insert into students (student_no,student_name,password,sex,phone,address,birthday,email,grade_id)values('1001','张青裁',default,'M',null,'上海松江','1988-02-26','ZQC@Sohu.com',0) ;
注意事项
- SQL语句不区分大小写
- 如果不写列名,代表给所有列(包括自增列)赋值
- 如果写列名,列和值的数量、类型一致
- 表名,列名直接写,不能加引号
- 文本类型和日期类型需要用单引号括住,数值类型直接写
- 不能违反任何约束
- 所以符号都是英文的
- 如果要插入默认值,可以写 default,也可以不写列名
多行插入
方式一
通过INSERT SELECT语句将现有表中的数据添加到已存在的表中
语法insert into 表名(列名,...)select 列名,...from 源表名
mysql和Oracle都可以使用
示例:
-- 把students表中student_name,address,email的数据放入address_list表的姓名,地址,电子邮件中insert into address_list (姓名,地址,电子邮件)select student_name,address,emailfrom students
方式二
通过UNION关键字合并数据进行插入
语法
insert into 表名[(列名,...)]select 值,.. union...select 值,...
只有mysql可以用 注意:值中不能有default
示例:
insert students (student_name,grade_id,sex)select '张可',7,1 unionselect '李扬',4,0 unionselect '杨晓',2,0 unionselect '汤美',3,0 unionselect '苏三东',7,1 unionselect '王立岩',3,1 unionselect '张伟',7,1 unionselect '陈刚',4,1 unionselect '王娟娟',7,0
方式三
使用多个(),一个()代表一行数据
语法
insert into 表名 [(列名,…)]values (值,…), (值,…)...
只有mysql可以用
示例:
insert into students(name,grade_id)values('张三',1),('李四',1),('王五',1)
修改
语法
update 表名 set 列=值,...[where 列名 运算符 值]
注意:多个条件使用逻辑运算符间隔
判空
判空条件的写法:where 列名 is null
假空值:where 列名= ''
— 此为表里是空的值而非null
非空条件的写法:where 列名 is not null
示例:
-- 把所有学生的性别改为0update students set sex = 0;-- 把地址是石家庄的学生地址改为北京update studentsset address ='北京'where address = '石家庄';-- 所有95分以下的学生成绩每人加5分update resultset student_result = student_result + 5where student_result <= 95-- 把所有邮箱是空的学生邮箱改为未知update studentsset email ='未知'where email is null;
删除
delete
语法delete from 表名 [where 列名 运算符 值]
示例:
-- 删除学生表中的所有学生delete from 学生表;-- 删除学号是0010012的学生delete from 学生表 where 学号 ='0010012';
truncate
区别
delete 可以删除所有数据,也可以删除一部分数据,删除后自增列不受影响,数据正被使用中不能删除
truncate 只能删除所有数据,删除后自增列重新编号,不能删除有外键关系的主表数据
三、导入导出数据
SQL文件导入导出
导入Excle数据
导出Excle
四、命令备份和还原
备份成SQL文件
语法
-- 导出一个数据库mysqldump -u用户名 -p密码 数据库名 [表名]>sql文件路径-- 导出几个数据库mysqldump -u用户名 -p密码 ---database 数据库1 [数据库2 数据库3...]>sql文件路径-- 导出所有数据库mysqldump -u用户名 -p密码 --all--database>sql文件路径
示例:
mysqldump -uroot -p1234 test>d:\test.sql #导出一个数据库mysqldump -uroot -p1234 test users>d:\users.sql #导出一个表mysqldump -uroot -p1234 ---database test1 test2>d:\te.sql #导出几个数据库mysqldump -uroot -p1234 --all--database>d:\all.sql #导出所有数据库
用SQL文件还原
mysql -u用户名 -p密码 数据库名<sql文件
示例:mysql -uroot -p1234 test < d:\bak\0101.sql
五、MySQL批量导入导出Excel、txt数据
1、Excel文件
导出数据到EXCEL文件
select *into outfile "C:\\Users\\Administrator\\Desktop\\data_out.xls" from bi_admin;
注意存储路径包含的的“\”需要转译
从EXCEL文件导入数据
第一种方法
excel数据做处理,另起一列用公式,对之前列所需数据拼写在sql语句,此处只有两列数据
公式为:=CONCATENATE(“insert into bi_admin(name,psd) values(‘“,A1,”‘,’”,B1,”‘);”)
然后鼠标点住C1单元格的右下角一直拖拽下去,为所有要执行sql语句的行插入公式
将所有sql语句放到mysql中执行即可
第二种方法
将excel文件转为txt格式,然后再导入mysql中
首先将excel文档另存成CSV(逗号分隔)文档
用记事本的打开方式打开刚刚保存的.csv文件,我们发现,列与列之间用逗号(,)隔开
将其另存为.txt文件,并且编码要选择UTF-8
最后执行下面sql语句即可
load data local infile "C:\\Users\\Administrator\\Desktop\\data_in.txt"into table bi_admin(name,psd)fields terminated by ','lines terminated by '\n'
2、txt文件
导出数据到txt文件
select *into outfile "C:\\Users\\Administrator\\Desktop\\data_out.txt"FIELDS TERMINATED BY "\t"lines terminated by "\r\n"from bi_admin;
字段之间的分隔和记录(行)之间的分隔默认是\t(即Tab)和\n。但可以改变,如: FIELDS TERMINATED BY ‘,’ —字段用,进行分隔 LINES TERMINATED BY ‘;’ —记录用; 进行分隔
从txt文件导入数据
load data local infile "C:\\Users\\Administrator\\Desktop\\data_in.txt"into table bi_admin(name,psd);
txt数据格式符合要求,每一项之间用Tab键进行分隔,如果该字段为NULL,则用\N表示
总结
1.请写出单行插入的语法【重要】
- insert into 表名 [(列1,列2,…)] values(值1,值2,…)
插入的注意事项:【了解】
- SQL语句不区分大小写
- 如果不写列名,代表给所有列(包括自增列)赋值
- 如果写列名,列和值的数量、类型一致
- 表名,列名直接写,不能加单引号,
- 文本类型和日期类型需要用引号括住,数值类型直接写
- 不能违反任何约束
- 所以符号都是英文的
- 如果要插入默认值,可以写 default(不能加引号),也可以不出列名
2.请写出多行插入的语法
union
INSERT INTO 表名(列名)
SELECT 列值 UNION
SELECT 列值 UNION
SELECT 列值
insert-select
INSERT INTO 表名(列名,…)
SELECT 列名,…
FROM 源表名
多个()
Insert into 表名 [(列1,列2,…)]
values (值1,值2,…),… (值1,值2,…)3.请写出修改的语法【重要】
update 表名 set 列1=值1,列2=值2 [where 更新条件]
4.请写出删除的语法【重要】
-
5.mysql的运算符有哪些?
算术运算符: + - *(乘法) /(除法) %(取余)
- 赋值运算符:=
- 比较运算符:等于=、大于>、小于<、不等于<>、大于等于>=、小于等于<=
-
6.SQL语句分类及各类中包含的命令【重要】
DQL 数据查询语言,包含select
- DML 数据操作语言, 包含insert ,update , delete
- DDL 数据定义语言,包含create table 建表,drop table 删表等
- DCL 数据控制语言,包含 grant,revoke等
7.mysql注释
— 这个注释直到该行结束(注意—后有空格)
#这个注释直到该行结束
/这是行中间的注释/
/这是多行的注释
这是多行的注释/












