SQL语句分类
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
DDL表操作
1.创建表
create table 表名( 字段名 类型(长度) [约束], 字段名 类型(长度) [约束], ... ); 类型: varchar(n) 字符串 int 整形 double 浮点 date 时间 timestamp 时间戳 约束:(详情查看第四章) primary key 主键,被主键修饰字段中的数据,不能重复、不能为null。 例如: ###创建分类表 CREATE TABLE category ( cid INT primary key, #分类ID cname VARCHAR(100) #分类名称 );
2.查看表
* 查看数据库中的所有表:show tables;
* 查看表结构:desc 表名;
3.删除表
* drop table 表名
4.修改表结构格式:
1).alter table 表名 add 列名 类型(长度) [约束]; 作用:修改表添加列. 例如: 为分类表添加一个新的字段为 分类描述 varchar(20) ALTER TABLE category ADD `desc` VARCHAR(20); 2).alter table 表名 modify 列名 类型(长度) 约束; 作用:修改表修改列的类型长度及约束. 注意: 如果有数据,必须注意数据类型varchar-->int 容易有错误数据 例如: 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL; 3).alter table 表名 change 旧列名 新列名 类型(长度) 约束; 作用:修改表修改列名. 例如: 为分类表的分类名称字段进行更换 更换为 description varchar(30) ALTER TABLE category CHANGE `desc`description VARCHAR(30); 4).alter table 表名 drop 列名; 作用:修改表删除列. 注意: 如果列中有数据,数据就会一起删除了,需谨慎 例如: 删除分类表中description这列 ALTER TABLE category DROP description; 5).rename table 表名 to 新表名; 作用:修改表名 例如: 为分类表category 改名成 category2 RENAME TABLE category TO category2; 6).alter table 表名 character set 字符集(了解); 作用:修改表的字符集 注意:不建议执行,有可能会产生乱码 例如: 为分类表 category 的编码表进行修改,修改成 gbk ALTER TABLE category CHARACTER SET gbk;
DML表操作
1.插入(insert)
* 向表中插入某些字段:insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
* 向表中插入所有字段,字段的顺序为创建表时的顺序:insert into 表 values (值1,值2,值3..);
2.删除(delete || truncate )
* delete from 表名 [where 条件]; (delete 一条一条删除,不清空auto_increment记录数)
* truncate table 表名; (truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始)
3.修改(update)
* 更新所有记录的指定字段:update 表名 set 字段名=值,字段名=值,...;
* 更新符合条件记录的指定字段:update 表名 set 字段名=值,字段名=值,... where 条件过滤;
DQL查询语句(单表)
1.查询指定字段信息
select 字段1,字段2,...from 表名;
2.distinct用于去除重复记录
select distinct 字段 from 表名;
3.表别名格式:(使用的as关键字,as可以省略)
select 字段名 as 别名 from 表名;
select 字段名 别名 from 表名;
4.条件查询
1).查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname = '花花公子'2).查询价格为800商品
SELECT * FROM product WHERE price = 8003).查询价格不是800的所有商品
SELECT * FROM product WHERE price != 800
SELECT * FROM product WHERE price <> 800
SELECT * FROM product WHERE NOT(price = 800)4).查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;5).查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;6).查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
SELECT * FROM product WHERE price IN (200,800);7).查询名称以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';8).查询名称含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';9).查询出名称中是五个字的所有商品
SELECT * FROM product WHERE pname LIKE '_____';10).查询名称第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';11).查询商品名称是null的值
SELECT * FROM product WHERE pname IS NULL;12).查询商品名称不是null的值
SELECT * FROM product WHERE pname IS NOT NULL;5.排序查询
* 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后
SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
ASC 升序 (默认)
DESC 降序
* 使用价格排序(升序)
SELECT * FROM product ORDER BY price DESC;
* 显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
6.聚合查询
count:统计指定列不为NULL的记录行数;
SELECT COUNT(*) FROM product WHERE price > 200;sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
SELECT SUM(price) FROM product;min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SELECT MIN(price)FROM product;max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
SELECT MAX(price) FROM product;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SELECT AVG(price) FROM product;7.分组查询
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where
having与where的区别:
* having是在分组后对查询的结果再次进行过滤,having后面可以使用分组函数(统计函数)
* where是在分组前对数据进行过滤,where后面不可以使用分组函数
格式 :
* SELECT 字段1,字段2… FROM 表名GROUP BY分组字段 HAVING 分组条件;
栗子:
* 统计所有商品名字相同的商品,进行分组求和计算
SELECT pname,SUM(price) FROM product GROUP BY pname;
* 求和后的数据只显示1000以上的
SELECT pname,SUM(price) p FROM product GROUP BY pname HAVING p>1000;