2023年8月3日发(作者:)
SQL结构化查询语句SQL结构化查询语句SQL定义了查询所有关系型数据库的规则。1、通⽤语法SQL语句可以单⾏或者多⾏书写,以分号结尾可以使⽤空格和缩进增强可读性不区分⼤⼩写,但是关键字建议⼤写3种注释注释内容;多⾏注释/*;-- 注释内容2、SQL分类DDL(Date Definition Language)数据定义语⾔⽤来定义数据库对象:数据库、表、列等,包括关键字:create,drop、alteDML(Data Manipulation Language)数据操作语⾔,增删改⽤来对数据库的表中的数据进⾏增删查改。关键字:insert、delete、updateDQL(Date Query Language)数据查询语⾔,查⽤来查询数据库表中的记录。关键字:select、whereDCL(Data Control Language)数据控制语⾔⽤来定义数据库的访问权限,安全级别,以及创建⽤户,关键字:GRANT、REVOKE3、DDL操作数据库、表1.
操作数据库:CRUDC(create)创建SQL语句描述CREATE database (if not exists) 数据库名 (character set 字符集创建⼀个新的数据库,括号是⼀个判断是否存在、设定该数据库的名称);字符集R(Retrieve)查询:SQL语句描述show databases;查看所有的数据库名称show create database 数据库名;查看某个数据库的创建语句U(Update)修改SQL语句D(Delete)删除,使⽤前三思SQL语句描述alter database 数据库名 character set 字符集名称;修改数据库使⽤的字符集描述drop database (if exits )数据库名;判断存在就删除数据库查询当前在使⽤的数据库SQL语句使⽤数据库SQL语句描述select database();查询当前在使⽤的数据库描述use 数据库名称使⽤某个数据库2、操作数据库表C(create)创建语法:create table 表名称( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n); # 最后⼀列不要加逗号,分号等,分号是结束标志其他创建表语句:create table table1_copied like table1,创建⼀个表,复制table1数据类型:数据类型intdouble(n,m)datedatetimetimestampvarchar(n)整数浮点数类型,指定⼀共有n位,⼩数点后保留m位⽇期类型,只包含年⽉⽇,yyyy-MM-dd⽇期时间类型,包含年⽉⽇时分秒,yyyy-MM-dd HH:mm:ss时间戳类型,包含年⽉⽇时分秒,yyyy-MM-dd HH:mm:ss,如果将来不给这个字段赋值为null,就⾃动使⽤系统时间字符串类型,要指定最⼤为n个字符描述R(Retrieve)查询,进到某个数据库后SQL语句show tables;查看该数据库所有的表desc 表名称;查询⼀个表的表结构,有什么字段,字段类型,是否主键等信息U(Update)修改修改表名:alter table 表名称 rename to 新表名称;修改表的字符集:alter table 表名称 character set 字符集名称;修改列名,数据类型:alter table 表名称 change 列名称 新列名称 新数据类型;alter table 表名称 modify 列名称 新数据类型;描述删除列:alter table 表名称 drop 列名称;添加列:alter table 表名称 add 列名称 数据类型;D(Delete)删除表SQL语句描述drop table (if exists) 表名称删除表,如果表存在4、DML:操作表中的数据1. 添加数据语法:insert into 表名称(列名1, 列名2.....列名n) values(值1, 值2......值n)注意:列名和值要⼀⼀对应如果不写列名,就默认要给所有列添加数据除了数字类型,其他类型都要⽤引号引起来2. 删除数据语法:delete from 表名 [where 条件]注意:delete from 表名:不写条件,就删除表中所有的数据TRUNCATE TABLE 表名:先删除表,再创建⼀张⼀样的空表,推荐使⽤这个语句删除所有记录3. 修改数据语法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件]5、DQL:查询表中的数据1.
DQL查询语句1. select * from 表名称:查询⼀个表的全部数据2. 排序查询,语法:order by 句⼦order by 排序字段1 排序⽅式1, 排序字段2 排序⽅式2,......;这⾥的意思是,⾸先按照排序⽅式⼀,如果⽅式⼀⼀样,那么使⽤⽅式⼆排序;(也就是只有第⼀种⽅式⼀样时,才会判断第⼆种⽅式)注意:排序⽅式:升序:ASC;降序:DESCselect * from student order by age DESC;(按照年龄降序排序)3. 聚合函数,将⼀列数据作为⼀个整体,进⾏纵向的计算。count:计算个数select count(列名称) from 表名称注意:聚合函数排除了空的(NULL)的⾏,解决⽅法替换NULL值的⽅法:select count(ifNULL(name, " ")) from student;尽量使⽤统计的列不要有空值的类,⼀般是主键使⽤count(*)max:计算最⼤值select max(列名) from 表名min:计算最⼩值select min(列名) from 表名sum:求和select sum(列名) from 表名avg:计算平均值select avg(列名) from 表名4. 分组查询:统计具有相同特征的语法:group by 字段 select sex, avg(age), count(id), min(age) from student group by sex; 注意:分组之后只能查询的字段,只有分组字段和聚合函数where 在分组之前限定,如果不满⾜条件,就不参与分组;having是在分组之后进⾏限定,如果不满⾜条件就不会被查询出来where后不可以跟聚合函数,having后可以进⾏聚合函数的判断select sex, avg(age), count(id), min(age) from student where age > 20 group by sex having count(id) <= 2;⼀般可以在聚合函数后写⼀个别名,这样就可以在判断的时候使⽤别名select sex, avg(age), count(id) peopleCount, min(age) from student where age > 20 group by sex having peopleCount <= 2;分页查询:语法:limit 开始的索引,每页查询的条数公式:开始的索引 = (当前的页码 - 1) × 每页显⽰的条数分页操作是每个数据库的操作⽅法是不⼀样的,limit关键字只是在MySQL可以使⽤,其他关系型数据库有⾃⼰的语法6、基础查询多字段查询语法:SELECT 字段1, 字段2, ... FROM table;去重:SELECT DISTINCT sex from student;计算:⾃⼰写⼀个字段参与参与查询:SELECT name, math, english, (math + english) FROM student;注意:如果有NULL参与计算,结果都为NULL,可以使⽤函数IFNULL()解决:IFNULL(English, 0)。意思是如果English这⼀列的值有NULL,就⽤0替代参与计算别名:可以给⾃⼰写的列起⼀个别名,使⽤关键字AS(可以省略):SELECT name, ifnull(math, 0) + english AS 总分 FROM student;7、条件查询1. 关键字WHERE后⾯跟着条件2. 运算符:运算符<, >, =, !=, <=, >=IN(集合)IS NULLLIKESELECT * FROM student WHERE math > 60;描述不等于可以使⽤!=或者<>, 没有==相当于使⽤OR连接条件NULL值不能使⽤=判断,要使⽤IS或者 IS NOTBETWEEN ... AND相当于使⽤ AND连接条件SELECT * FROM student WHERE math > 90 AND math <= 92;SELECT * FROM student WHERE math BETWEEN 90 AND 92;SELECT * FROM student WHERE math = 90 OR math = 92;SELECT * FROM student WHERE math IN (90, 92, 100);SELECT * FROM student WHERE math is NULL;-- NULL要使⽤关键字 IS判断SELECT * FROM student WHERE math IS NOT NULL;-- NULL要使⽤关键字 IS判断3. 模糊查询LIKE占位符:%(任意多个字符),_(单个任意字符)SELECT * FROM student WHERE name LIKE '____'; -- name 是四个字符的⼈SELECT * FROM student WHERE name LIKE '孙%'; -- 第⼀个字是孙的⼈SELECT * FROM student WHERE name LIKE '%⼋%'; -- 中间有⼋字的⼈SELECT * FROM student WHERE name LIKE '_⼋%';-- 第⼆个⼦是⼋的⼈
2023年8月3日发(作者:)
SQL结构化查询语句SQL结构化查询语句SQL定义了查询所有关系型数据库的规则。1、通⽤语法SQL语句可以单⾏或者多⾏书写,以分号结尾可以使⽤空格和缩进增强可读性不区分⼤⼩写,但是关键字建议⼤写3种注释注释内容;多⾏注释/*;-- 注释内容2、SQL分类DDL(Date Definition Language)数据定义语⾔⽤来定义数据库对象:数据库、表、列等,包括关键字:create,drop、alteDML(Data Manipulation Language)数据操作语⾔,增删改⽤来对数据库的表中的数据进⾏增删查改。关键字:insert、delete、updateDQL(Date Query Language)数据查询语⾔,查⽤来查询数据库表中的记录。关键字:select、whereDCL(Data Control Language)数据控制语⾔⽤来定义数据库的访问权限,安全级别,以及创建⽤户,关键字:GRANT、REVOKE3、DDL操作数据库、表1.
操作数据库:CRUDC(create)创建SQL语句描述CREATE database (if not exists) 数据库名 (character set 字符集创建⼀个新的数据库,括号是⼀个判断是否存在、设定该数据库的名称);字符集R(Retrieve)查询:SQL语句描述show databases;查看所有的数据库名称show create database 数据库名;查看某个数据库的创建语句U(Update)修改SQL语句D(Delete)删除,使⽤前三思SQL语句描述alter database 数据库名 character set 字符集名称;修改数据库使⽤的字符集描述drop database (if exits )数据库名;判断存在就删除数据库查询当前在使⽤的数据库SQL语句使⽤数据库SQL语句描述select database();查询当前在使⽤的数据库描述use 数据库名称使⽤某个数据库2、操作数据库表C(create)创建语法:create table 表名称( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n); # 最后⼀列不要加逗号,分号等,分号是结束标志其他创建表语句:create table table1_copied like table1,创建⼀个表,复制table1数据类型:数据类型intdouble(n,m)datedatetimetimestampvarchar(n)整数浮点数类型,指定⼀共有n位,⼩数点后保留m位⽇期类型,只包含年⽉⽇,yyyy-MM-dd⽇期时间类型,包含年⽉⽇时分秒,yyyy-MM-dd HH:mm:ss时间戳类型,包含年⽉⽇时分秒,yyyy-MM-dd HH:mm:ss,如果将来不给这个字段赋值为null,就⾃动使⽤系统时间字符串类型,要指定最⼤为n个字符描述R(Retrieve)查询,进到某个数据库后SQL语句show tables;查看该数据库所有的表desc 表名称;查询⼀个表的表结构,有什么字段,字段类型,是否主键等信息U(Update)修改修改表名:alter table 表名称 rename to 新表名称;修改表的字符集:alter table 表名称 character set 字符集名称;修改列名,数据类型:alter table 表名称 change 列名称 新列名称 新数据类型;alter table 表名称 modify 列名称 新数据类型;描述删除列:alter table 表名称 drop 列名称;添加列:alter table 表名称 add 列名称 数据类型;D(Delete)删除表SQL语句描述drop table (if exists) 表名称删除表,如果表存在4、DML:操作表中的数据1. 添加数据语法:insert into 表名称(列名1, 列名2.....列名n) values(值1, 值2......值n)注意:列名和值要⼀⼀对应如果不写列名,就默认要给所有列添加数据除了数字类型,其他类型都要⽤引号引起来2. 删除数据语法:delete from 表名 [where 条件]注意:delete from 表名:不写条件,就删除表中所有的数据TRUNCATE TABLE 表名:先删除表,再创建⼀张⼀样的空表,推荐使⽤这个语句删除所有记录3. 修改数据语法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件]5、DQL:查询表中的数据1.
DQL查询语句1. select * from 表名称:查询⼀个表的全部数据2. 排序查询,语法:order by 句⼦order by 排序字段1 排序⽅式1, 排序字段2 排序⽅式2,......;这⾥的意思是,⾸先按照排序⽅式⼀,如果⽅式⼀⼀样,那么使⽤⽅式⼆排序;(也就是只有第⼀种⽅式⼀样时,才会判断第⼆种⽅式)注意:排序⽅式:升序:ASC;降序:DESCselect * from student order by age DESC;(按照年龄降序排序)3. 聚合函数,将⼀列数据作为⼀个整体,进⾏纵向的计算。count:计算个数select count(列名称) from 表名称注意:聚合函数排除了空的(NULL)的⾏,解决⽅法替换NULL值的⽅法:select count(ifNULL(name, " ")) from student;尽量使⽤统计的列不要有空值的类,⼀般是主键使⽤count(*)max:计算最⼤值select max(列名) from 表名min:计算最⼩值select min(列名) from 表名sum:求和select sum(列名) from 表名avg:计算平均值select avg(列名) from 表名4. 分组查询:统计具有相同特征的语法:group by 字段 select sex, avg(age), count(id), min(age) from student group by sex; 注意:分组之后只能查询的字段,只有分组字段和聚合函数where 在分组之前限定,如果不满⾜条件,就不参与分组;having是在分组之后进⾏限定,如果不满⾜条件就不会被查询出来where后不可以跟聚合函数,having后可以进⾏聚合函数的判断select sex, avg(age), count(id), min(age) from student where age > 20 group by sex having count(id) <= 2;⼀般可以在聚合函数后写⼀个别名,这样就可以在判断的时候使⽤别名select sex, avg(age), count(id) peopleCount, min(age) from student where age > 20 group by sex having peopleCount <= 2;分页查询:语法:limit 开始的索引,每页查询的条数公式:开始的索引 = (当前的页码 - 1) × 每页显⽰的条数分页操作是每个数据库的操作⽅法是不⼀样的,limit关键字只是在MySQL可以使⽤,其他关系型数据库有⾃⼰的语法6、基础查询多字段查询语法:SELECT 字段1, 字段2, ... FROM table;去重:SELECT DISTINCT sex from student;计算:⾃⼰写⼀个字段参与参与查询:SELECT name, math, english, (math + english) FROM student;注意:如果有NULL参与计算,结果都为NULL,可以使⽤函数IFNULL()解决:IFNULL(English, 0)。意思是如果English这⼀列的值有NULL,就⽤0替代参与计算别名:可以给⾃⼰写的列起⼀个别名,使⽤关键字AS(可以省略):SELECT name, ifnull(math, 0) + english AS 总分 FROM student;7、条件查询1. 关键字WHERE后⾯跟着条件2. 运算符:运算符<, >, =, !=, <=, >=IN(集合)IS NULLLIKESELECT * FROM student WHERE math > 60;描述不等于可以使⽤!=或者<>, 没有==相当于使⽤OR连接条件NULL值不能使⽤=判断,要使⽤IS或者 IS NOTBETWEEN ... AND相当于使⽤ AND连接条件SELECT * FROM student WHERE math > 90 AND math <= 92;SELECT * FROM student WHERE math BETWEEN 90 AND 92;SELECT * FROM student WHERE math = 90 OR math = 92;SELECT * FROM student WHERE math IN (90, 92, 100);SELECT * FROM student WHERE math is NULL;-- NULL要使⽤关键字 IS判断SELECT * FROM student WHERE math IS NOT NULL;-- NULL要使⽤关键字 IS判断3. 模糊查询LIKE占位符:%(任意多个字符),_(单个任意字符)SELECT * FROM student WHERE name LIKE '____'; -- name 是四个字符的⼈SELECT * FROM student WHERE name LIKE '孙%'; -- 第⼀个字是孙的⼈SELECT * FROM student WHERE name LIKE '%⼋%'; -- 中间有⼋字的⼈SELECT * FROM student WHERE name LIKE '_⼋%';-- 第⼆个⼦是⼋的⼈
发布评论