一、SQL语句的分类--Transact-sql语句
1.DCL--数据控制语言(管理人员使用,多用于备份)
2.DML--数据操纵语言(编程人员使用,CRUD)
3.DDL--数据定义语言(使用鼠标在界面操作,非代码操作)
CRUD--增删改查
C--create (增加) R--retrieve(检索,查询) U--update(更新,更改) D--delete(删除)
二、数据库的分类
1.关系型数据库--用表存数据,易于检索,冗余度小.
2.层次型数据库--硬盘文件夹,不常见.
3.网络型数据库--互联网超链接,不常见.
冗余度:如员工信息表中包含工号、姓名、单位、部门、薪资等信息,那么单位和部门两列即冗余了,相当于一直重复利用;那我们可以新建表将单位和部门这两列以代号代替,那么原表中仅需填入代号即可方便检索.
三、CRUD操作
1.添加
INSERT INTO语句使用的前提是,要添加的列不是自增长列
1).insert into 表名 values(' ',' ')--into可以省略不写,括号中是要添加的值.
例:insert into Fruit values('1','红富士','5','苹果','栖霞')
2).insert into 表名 (列名,列名,列名,列名)values(' ',' ',' ')--如列Ids是自增长列,后面的()内即不需要赋值.
例:innsert into Fruit(Ids,Name,Price,[Type]) values('2','巨峰','6','葡萄')
3).insert into 表名 (列名,列名,列名)values(' ',' ',' ')--如果不按照表格列名顺序输入值,即按照列名输入的顺序赋值.
insert into Fruit(Ids,Name,[Type],Price,[Source]) values('3','冬枣','枣类','20','沾化')
2.删除
1)delete from Fruit --删除Fruit表格中的数据,日志记录,重新在表格内输入值自增长列不复位.
PS:如原表格中数据自增长列是1-11行,删除所有数据后再输入值即从12行起自增长.
2) truncate table fruit -- 截断fruit表格中的数据,日志中无记录,重新再表格内输入值自增长复位.
PS:如原表格中数据自增长列是1-11行,截断所有数据后再输入值即从1行起自增长.
3)delete from fruit where 列名 关系运算符 值
例:delete from Fruit where Source = '莱阳'--将出产地为莱阳的值删除.
delete from Fruit where Type='葡萄'--将类别为葡萄的值删除.
delete from Fruit where Source='深圳' and Price < 18--将出产地为深圳的值并且价格小于18的值删除.
delete from Fruit where Source='深圳' or Price < 18--将出产地为深圳的值或者价格小于18的值删除.
3、更新
1)update Fruit set 列名=值,列名=值,... where 列名 关系运算符 值
例:update fruit set Price=18 where name='荔枝'-- 将名字为荔枝的值的价格改为18(where 后面的"列名 关系运算符 值" 也可更换行中其他唯一标识).
PS:更新过的信息是撤销不了的,如怕更新错误可以有机会撤销可如下操作
2)begin tran(transaction的简写)--运算开始
update Fruit Type='苹果',Source='栖霞'--将种类更新为苹果,产地更新为栖霞.
roll back--回滚(回到更新信息之前的信息,相当于撤销更新.)在使用begin tran的前提先才可执行.
4.查询
投影:对列的筛选 列--字段--属性
筛选:对行的筛选 行--记录--元组
查询操作并不会改变数据库中的内容,只是将查询内容显示出来.
1)select * from Fruit -- 显示Fruit表中所有列的信息( "*" 是指显示所有的列)
2)select Name,Type,Price,…………from Fruit --从Fruit表中显示Name列,Type列,Price列,…………列.(投影)
3)等值及不等值查询
select * from Fruit where 列名 关系运算符 值
例:select *from fruit where price>=10 and source='新疆' --显示价格>=10并且产地为信息的记录.
4)范围查询
select *from fruit where price between 10 and 20 --查询价格在10到20之间的记录.
select *from fruit where price in(3,5,16) --查询价格为3,5,16的记录.
5)列去重复
select distinct source from fruit --删除source列中的重复值.
PS:select distinct后的列名只能写一个,写多了列名的话只执行第一个列名,仅显示执行列.
6)模糊查询
通配符:% 是指任意多个任意字符; _ 是指一个任意字符.
select * from car where Name like '%5%' --查询car表Name列中包含5的记录.
select * from car where Name like '%型' --查询car表Name列中最后一个字是型的记录.
select * from car where Name like '宝%' --查询car表Name列中第一个字是宝的记录.
select * from car where Name like '_马%' --查询car表Name列中第二个字是马的记录.
select * from car where Name like '_ _3%' or Name like '_ _5%' --查询car表Name列中第三个字是3或5的记录,也可以用另一种方法操作,如下.
select * from car where Name like '_ _[3,5]%' --查询car表Name列中第三个字是3或5的记录,[]表示选其一.
5.排序
ascending(升序简写为asc) descending(降序简写为desc)
select * from car order by price asc --将car表中的price列按照升序排列,asc可省略.
select *from car order by oil asc, exhanst desc,price asc --将car表中的oil列按照升序排列,oil列中相同值的再按照exhanst降序排列,最后exhanst列中相同值的再按照price升序排列.这样就找出耗油最少,排量最大,价格最优惠的车了.
6.统计--聚合函数(统计函数)
1)COUNT(*)--总数
select COUNT(*) from chinastates where areacode like '_ _ _ _'--统计chinastates表内地级市的总数( areacode like'_ _ _ _'代表地级市).
PS:COUNT 后为列名的话,以列计数,那么查询列中为NULL值的则被忽略不予计数.
2)AVG --平均值
select AVG(price) from car where brand in('b001','b002','b003','b004')--求car表中系列代码为'b001','b002','b003','b004'的平均值.
3)SUM --总和
select SUM (price)from car --统计car表中所有价格的总和,()内可以写多列,如:price/ids.
select *,(price *0.9) as 价格 from car --统计价格九折后的价格显示在表最后,列名为价格.
select code 代号,name 名称,brand 系列,Time 上市时间,oil 油耗,powers 功率,Exhaust 排量,price 价格,pic 图片路径 from car--用汉字列名表示英文列名.
4)MAX --最大值
select MAX(price) from car -- 显示价格最大值.
5)MIN --最小值
select Min(price) from car -- 显示价格最小值.
7.分组
1)select oil,COUNT(*) from car group by oil order by COUNT(*) desc--按照oil进行分组,显示出oil列和每组的个数并降序排列.
2)select oil,COUNT(*) from car where price >50 group by oil order by COUNT(*) desc--对价格大于50的按照oil进行分组并降序排列.
3)select type,COUNT(*) from fruit group by type having COUNT(*)>1 --按照type进行分组,将组内个数大于1的type和个数显示出来.
PS:having是针对统计好的结果进行筛选,所以使用having的前提必须使用group by.