create database<数据库名>; --创建数据库create table<表名><列名><数据类型><该列所需约束>; --创建表drop table<表名>; --删除表alter table <表名> add <列名> <数据类型>; --新增列alter table <表名> drop column <列名>; --删除列sp_rename<变更前名称> <变更后名称>; --修改数据库名字insert into <表名><列名> values <数据>; --向表插入数据select <列名> from <表名>; --查询数据库select <列名> from <表名> where <条件表达式>; --查询特定的数据
1、DISTINCT
- 在SELECT语句中使用DISTINCT可以在查询时删除重复行,使查询出来的结果都是唯一值。
select distinct product_name from Product;
2、运算符

3、IS NULL
- NULL翻译过来是“空”
- 可以使用IS NULL来筛选表中含有NULL的列名
使用IS NOT NULL 筛选不含有NULL的列名
select * from Product where produst_name is null; --查询表中含有null的列select * from Product where product_name is not null; --查询表中不包含null的列
4、NOT
想要指定“不是~”这样的否定条件时,需要使用<> 或者 != 运算符。除此之外还存在另外一个表示否定,并且使用范围更广的运算符 not,not运算符用来否定某一条件,但是不能滥用。
select * from Product where sale_price >= 1000; --查询价格大于等于1000元的商品select * from Product where not sale_price >= 1000; --查询价格不等于大于1000元的商品
5、AND\OR
AND 运算符在其两侧的查询条件都成立时整个查询条件才成立,其意思相当于“并且”。
- OR 运算符在其两侧的查询条件有一个成立时整个查询条件都成立,其意思相当于“或者
- 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。 ```sql select * from Product where product_name = ‘衣服’ and sale_price > 1000; —查询价格大于1000的衣服
select * from Product where product_name = ‘菜刀’ or sale_price > 500; —查询商品名字:菜刀,或者商品价格大于500元
6、**聚合函数**- 通过SQL 对数据进行某种操作或计算时需要使用函数。例如,计算表中全部数据的行数时,可以使用COUNT 函数。该函数就是使用COUNT(计数)来命名的。除此之外,SQL 中还有很多其他用于汇总的函数,在聚合函数里面也可以使用distinct,例如:COUNT(distinct product_name)- COUNT: 计算表中的记录数(行数)- SUM: 计算表中数值列中数据的合计值- AVG: 计算表中数值列中数据的平均值- MAX: 求出表中任意列中数据的最大值- MIN: 求出表中任意列中数据的最小值```sqlselect count(product_name) from Product; --计数select sum(sale_price) from Product ; --求和select......
7、GROUP BY
- 使用GROUP BY子句可以像切蛋糕那样将表分割。通过使用聚合函数和GROUP BY子句,可以对数据类型进行分组。
- 聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。
- 使用聚合函数和GROUP BY子句时需要注意以下4点。
- ① 只能写在SELECT子句之中
- ② GROUP BY子句中不能使用SELECT子句中列的别名
- ③ GROUP BY子句的聚合结果是无序的
④ WHERE子句中不能使用聚合函数
select product_name count(*) from Product;group by product_name;
8、HAVING
HAVING和GROUP BY 搭配使用,HAVING的作用是:GROUP BY在对数据类型进行分组后使用HAVING对分组好的数据进行条件筛选。HAVING类似于WHERE字句,但WHERE只能指定行的条件,不能记录组的条件,而HAVING可以指定组的条件,不能记录行的条件。
- WHERE 子句 = 指定行所对应的条件
HAVING 子句 = 指定组所对应的条件
select product_type,count(*) from Productgroup by product_typehaving count(*) > 2;--查询分组数量大于2的组别
9、ORDER BY
ORDER BY用于对查询出来的结果进行顺序排列,不论何种情况,ORDER BY 子句都需要写在SELECT 语句的末尾
可以使用别名、聚合函数,但是不能对NULL进行排序。
select * from Product order by sale_price; --从小到大排序select * from Product order by sale_price desc; --从大到小排序
10、INSERT VALUES
新创建的表是没有数据的,使用INSERT语句可以向表中插入数据(行),表名后面的列清单和VALUES 子句中的值清单的列数必须保持一致。列数不一致时会出错,无法插入数据。 ```sql inser into <表名> (列名) values(数据清单); —基本语法
insert into Product(product_id,product_name,product_type,sale_price) —单行插入 values(‘0019’,’订书机’,’办公用品’,300);
insert into Product(product_id,product_name,product_type,sale_price,purehase_price,regist_date) values(‘0010’,’涂改液’,’办公用品’,600,1200,’2010-10-25’), (‘0011’,’A4纸’,’办公用品’,300,100,’2010-10-25’), (‘0012’,’裤子’,’衣服’,1600,4200,’2010-10-25’) —多行插入
insert into Product values(‘0009’,’西瓜刀’,’厨房用具’,500,1000,’2010-10-25’) —单行插入
insert into Product values(‘0009’,’筷子’,’厨房用具’,300,7000,’2010-10-25’), (‘0009’,’碗’,’厨房用具’,300,1000,’2010-10-25’) (‘0009’,’西瓜刀’,’厨房用具’,500,1000,’2010-10-25’) —多行插入
- 还可以使用INSERT从其他表中复制数据,(可以用该功能来备份表)- [SQL 复制数据及表结构](https://www.yuque.com/u2059997/brh1n5/dkc4lg?view=doc_embed)11、**DELETE**- DELETE可以删除表中全部数据也可以有针对性的删除某些数据!**谨慎删除数据,一旦删除后无法恢复**- 还有另外一种TRUNCATE语句,基本语法:(TRUNCATE<表名>), TRUNCATE只能删除表中全部数据,不能使用WHERE添加条件来删除部分数据。在删除速度上 TRUNCATE 比 DELETE 要快得多,因为TRUNCATE不能添加WHERE条件!```sqldelete from Product; --删除表中全部数据delete from Productwhere product_id = '0001'; --有条件的删除数据delete from Productwhere not product_id = '0001'; --有条件的删除数据
12、UPDATE
- 使用UPDATE语句可以更改(更新)表中的数据。
- 更新部分数据行时可以使用WHERE来指定更新对象的条件。通过WHERE
- 子句指定更新对象的UPDATE语句称为搜索型UPDATE语句。
- UPDATE语句可以将列的值更新为NULL。
- 同时更新多列时,可以在UPDATE语句的SET子句中,使用逗号分隔更
- 对更新的数据也可以进行加减乘除 ```sql update<表名> set <列名> = <表达式>; —基本语法
update Product set sale_price = 100; —把sale_price字段全部更新为100
update Product set sale_price = 300 where product_id = ‘0001’; —把product_id为100的sale_price字段更新为300
update Product
set sale_price = sale_price 10,
purchase_price = purchase_price / 2
where product_type = ‘厨房用具’; —对多行数据更新
```
* 
