您好,欢迎访问三七文档
SQL中常用语句——读sql必知必会《SQL必知必会》是一本200页不到,32开的handbook可方便随身带。里面的很多内容是以前知道但没有理解,这本书内容通俗易懂的,如形容数据表就像是一个文件夹,数据库实例就像是一个文件柜这样容易理解。这本书的原作者写得不错,翻译的水平也极佳。这本书的定位是入门,所以一切都以点到就为止了。比如存储过程那一章原作者就说了只以简单的讲一讲。我们平时实际工作中写得就复杂多了。而且原作者把各种主流DBMS的区别与一般常见的实践技巧全部传授给了你,我觉得这本书正是我们这些SQL菜鸟非常需要的知识。表中数据的操作1创建示例表业并操作操作表中的数据2使用INSERT语句插入数据3使用UPDATE语句更新数据4使用DELETE语句删除数据5使用SELECT语句查询数据数据表Goods(商品)的数据结构列名数据类型是否为空商品编号IntNo商品名称Varchar(20)No生产厂商Varchar(30)No进货价MoneyNo零售价MoneyNo数量IntNo进货时间DateTimeNo进货员工编号Varchar(20)No主键:商品编号,自增字段创建进货表GoodsCREATETABLEGoods(商品编号IntIDENTITY(1,1)primarykeyNOTNULL,商品名称Varchar(20)NOTNULL,生产厂商Varchar(20)NOTNULL,进货价MoneyNOTNULL,零售价MoneyNOTNULL,数量IntNOTNULL,进货时间DateTimeNOTNULL,进货员工编号Char(6)NOTNULL)表Employees(雇员)数据表的数据结构列名数据类型是否为空编号Char(6)No姓名Char(8)No性别BitNo部门Varchar(16)Yes电话Varchar(20)No地址Varchar(50)Yes主键:编号创建Employees(雇员)CREATETABLEEmployees(编号char(6)primarykeyNOTNULL,姓名char(8)NOTNULL,性别bitNULL,部门varchar(16)NULL,电话varchar(20)NULL,地址varchar(50)NULL)数据表Sell(销售)的数据结构列名数据类型是否为空销售编号IntNo商品编号IntNo数量IntNo售出时间DateTimeNo售货员工编号Char(6)No创建已售商品表SellCREATETABLESell(销售编号IntprimarykeyNOTNULL,商品编号IntNOTNULL,数量IntNOTNULL,售出时间DateTimeNOTNULL,售货员工编号Char(6)NOTNULL)1、使用INSERT语句向数据表Employees插入一条记录INSERTINTOEmployees(编号,姓名,性别)VALUES('000016','李明',1)使用INSERT语句插入数据2、使用SELECTINTO语句生成一张新数据表,新数据表的名称为Employees2,数据来自于Employees数据表中性别=1的编号,姓名,性别等字段SELECT编号,姓名,性别INTOEmployees2FROMEmployeesWHERE性别=13、使用INSERT语句将数据表Employees中性别=1的记录插入数据表Employees1(数据表Employees1的结构与Employees完全相同)INSERTINTOEmployees1SELECT*FROMEmployeesWHEREEmployees.性别=1使用UPDATE语句更新数据UPDATE{table_name|view_name}SETcolumn_name={expression|DEFAULT|NULL}[,...n][WHEREsearch_condition]1、使用UPDATE语句将数据表Employees中编号为“000006”记录的电话更改为01058796545UPDATEEmployeesSET电话=‘043158796545'WHERE编号=‘000016’Select电话fromEmployeesWhere编号=‘000016’使用DELETE语句删除数据5.5.1DELETE语句DELETE[FROM]{table_nameWITH(table_hint_limited[...n])|view_name}[WHEREsearch_condition]1、使用DELETE语句删除数据表Sell中售出时间为2004年12月1日以前的记录DELETESellwhere售出时间‘2004-12-01’Select*fromSellwhere售出时间‘2004-12-01’2、使用DELETE语句删除数据TRUNCATE语句其语句格式为:TRUNCATETABLEname快速删除数据库表记录它和无条件的DELETE有同样的效果,不过因为它不做表扫描,因而快得多。在大表上最有效。1、使用SELECT语句查询数据SELECT语句的基本格式如下:SELECT[prod_name,prod_name,…]FROMtable_[WHEREsearch_condition(条件)][GROUPBYgroup_by_expression(分组)][ORDERBYorder_expression(排序)[ASC(升序)|DESC(降序)]1、查询员工表中所有员工的姓名和联系电话SELECT姓名,电话FROMemployeesSELECT*FROMemployeesSELECT*FROMemployeeswhere部门='财务部'2、去掉重复值DISTINCTSELECTDISTINCT生产厂商FROMgoods2、查询表中的前4条记录TOPSELECTTOP4商品名称,进货价,数量FROMgoods3、字段别名查询asSELECT编号asnumber,姓名asname,电话astelephoneFROMemployees4、查询各件商品的进货总金额*SELECT商品名称,进货价*数量AS总金额FROMgoods注意:*字段类行必须整形、浮点形5、表的别名asSELECT姓名,电话FROMemployeesascWHEREc.姓名='王峰'6、查询进货总金额小于10000元的商品名称SELECT商品名称FROMgoodsWHERE进货价*数量100007、多条件查询andSELECT商品名称FROMgoodsWHERE进货时间‘2005-1-1’AND进货价10008、模糊查询like%SELECT*FROMemployeesWHERE姓名LIKE‘李%’注意:like查询后面必须有%_%表示若干字符_表示一个字符9、BETWEENAND查询零售价格在2000到3000元之间的所有商品SELECT商品名称,零售价FROMgoodsWHERE零售价BETWEEN2000AND300010、集合查询inSELECT商品名称,进货价FROMgoodsWHERE商品名称IN(‘打印机’,‘摄像机’)(注:(集合1)IN(集合2),表示集合1的每个元素均在集合2中则结果为真;把IN改成NOTIN,则意思相反。)11、ISNOTNULL(NULL)查询电话不为空的员工信息:SELECT*FROMemployeesWHERE电话ISNOTNULL12、排序DESC(ASC)查询商品的进货价格并按从大到小排序SELECT商品名称,进货价FROMgoodsORDERBY进货价DESC/ASC13、记录数和COUNT查询财务部的员工人数SELECTCOUNT(*)AS人数FROMemployeesWHERE部门=‘财务部’SELECT*FROMemployeesWHERE部门='财务部'14、求和SUM查询商品编号为2的商品的销售数量SELECTSUM(数量)as销售数量FROMsellWHERE商品编号='2'SELECT*FROMsellWHERE商品编号='2'15、分组GROUPBY统计各部门的人数SELECT部门,COUNT(*)AS人数FROMEmployeesGROUPBY部门select*fromemployees对员工表按性别统计各部门人数,可以写为:SELECT性别,部门,COUNT(部门)FROMEmployeesGROUPBY性别,部门16、HAVING通过为作为一个整体的组指定条件(即HAVING子句),可限定查询中出现的组。在对数据进行分组和聚合后,将用到HAVING子句中的条件。只有符合条件的组才出现在查询中SELECT性别,部门,COUNT(部门)AS人数FROMEmployeesGROUPBY性别,部门HAVING性别='1'SELECT性别,部门,COUNT(性别)AS人数FROMEmployeeswhere性别=‘1’GROUPBY性别,部门--HAVING性别='1'某些时候having与where的功能相同17、联接形式(关联)SELECT销售编号,商品名称,sell.数量as销售数量FROMgoods,sellWHEREgoods.商品编号=sell.商品编号18、使用左外联接SELECT销售编号,商品名称,sell.数量as销售数量FROMgoodsLEFTJOINsellONgoods.商品编号=sell.商品编号注意:查看与关联的区别18、使用右外联接SELECT销售编号,商品名称,sell.数量as销售数量FROMgoodsLEFTJOINsellONgoods.商品编号=sell.商品编号SELECT销售编号,商品名称,sell.数量as销售数量FROMgoodsRIGHTJOINsellONgoods.商品编号=sell.商品编号19、联合查询union联合查询进货员工和销售员工,可以写为:SELECT售货员工编号AS业务员FROMsellUNIONSELECT进货员工编号FROMgoods20、使用逻辑运算符AND和ORSELECT*FROMemployeeswhere编号=‘1001’or编号='1002'21、嵌套查询SELECT*FROMemployeesWHERE编号=ANY(SELECT进货员工编号FROMgoods)any意思是任意一个SELECT*FROMemployeesWHERE编号in(SELECT进货员工编号FROMgoods)22、否notSELECT*FROMemployeesWHERE编号Notin(SELECT进货员工编号FROMgoods)Thankyouverymuch!
本文标题:-SQL必知必会
链接地址:https://www.777doc.com/doc-4739655 .html