SQL使用
-
分类
-
数据定义语句(Data Defination Language)用于建立或者修改数据库对象,包括数据库、数据表、视图、存储过程及触发器等,主要有CREATE、ALTER、DROP语句。
-
数据操纵语句(Data Manipulation Language,DML),实现对数据库中数据的查询和更新,主要有SELECT、INSERT、UPDATE、DELETE语句。
-
数据控制语句(Data Control Language,DCL),实现对数据库对象的授权及控制事务等,主要有GRANT、REVOKE、DENY等语句。
-
定义语句(DDL)
-- 创建库 create database db1; -- 创建库是否存在,不存在则创建 create database if not exists db1; -- 查看所有数据库 show databases; -- 查看某个数据库的定义信息 show create database db1; -- 修改数据库字符信息 alter database db1 character set utf8; -- 删除数据库 drop database db1; --创建表 create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp ); -- 查看表结构 desc 表名; -- 查看创建表的SQL语句 show create table 表名; -- 修改表名 alter table 表名 rename to 新的表名; -- 添加一列 alter table 表名 add 列名 数据类型; -- 删除列 alter table 表名 drop 列名; -- 删除表 drop table 表名; drop table if exists 表名 ;
-
操作语句(DML)
-
增加
-- 写全所有列名(字段) insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); -- 不写列名(所有列全部添加) insert into 表名 values(值1,值2,...值n); -- 插入部分数据 insert into 表名(列名1,列名2) values(值1,值2); -- 插入一行 insert into 表名(行1,行2,...) values(值1,值2,...),(值3,值4,...) -- eg -- 创建表名为employee的表格 CREATE TABLE employee(name VARCHAR(20), age INT(2), gender VARCHAR(8)); INSERT INTO employee (name, age, gender) VALUES ('Tom', 24, 'male'); -- 向employee表中插入一行数据,其中name为"Tom", age为24,gender为"male"
-
删除
-- 删除表中数据(一列) delete from 表名 where 列名 = 值; -- 删除表中所有数据 delete from 表名; -- 删除表中所有数据(高效 先删除表,然后再创建一张一样的表。) truncate table 表名;
-
修改
-- 不带条件的修改(会修改所有行) update 表名 set 列名 = 值; -- 带条件的修改 update 表名 set 列名 = 值 where 列名=值; -- eg update student set name="老刘" where id=1;
-
-
查询(DQL)
-
*BETWEEN...AND* (在什么之间)和 *IN*( 集合)
-- 查询年龄大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查询年龄22岁,18岁,25岁的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25);
-
*is not null(*不为null值) 与 *like*(模糊查询)、*distinct*(去除重复值)
-- 查询英语成绩不为null SELECT * FROM student WHERE english IS NOT NULL; _:单个任意字符 %:多个任意字符 -- 查询姓马的有哪些? like SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%'; -- 关键词 DISTINCT 用于返回唯一不同的值。 -- 语法:SELECT DISTINCT 列名称 FROM 表名称 SELECT DISTINCT NAME FROM student ;
-
-
排序查询(order... by)
-- 1 order by 排序字段 排序方式,2 order by 排序字段1 排序方式1 ,排序字段2 排序方式2... SELECT * FROM person ORDER BY math; --默认升序 SELECT * FROM person ORDER BY math desc; --降序 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件.
-- 按生源地升序和学号降序查询学生电话信息 -- 字符串排序按创建数据库时选定的字符集(如utf8)进行,英文字符将按字符序排序。若希望汉字按拼音字母排序,则使用convert(字段名using gbk)函数将字段转为gbk 字符集(—种汉字编码) SELECT Location,StudentCode, StudentName, Phone FROM student ORDER BY convert(Location using gbk),StudentCode DESC;
-
分组查询(group...by)
语法:group by 分组字段; 注意:分组之后查询的字段:分组字段、聚合函数
-- 按照性别分组。分别查询男、女同学的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
-
聚合函数:将一列数据作为一个整体,进行纵向的计算。
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均数
-
LIMIT子句用于显示查询结果中的部分记录。语法格式如下:
LIMIT起始位置,记录数 -- 若「起始位置」为0,可省略;若「记录数」大于查询结果记录总数,则显示所有记录。 查询显示平均成绩前3名的学生 SELECT StudentCode, avg(Score) FROM courseenroll GROUP BY StudentCode ORDER BY avg(Score) DESC LIMIT 3;
-
-