首页 > 技术文章 > 关于数据库增删改查的应用 20140903

DORCASQING 2014-09-05 00:34 原文

一、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.

 

推荐阅读