SQL整理1Word格式.docx
- 文档编号:16540141
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:22.13KB
SQL整理1Word格式.docx
《SQL整理1Word格式.docx》由会员分享,可在线阅读,更多相关《SQL整理1Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
通过外键实现
4、自定义完整性约束
用来定义特定的规则,用数据库的规则,存储过程或者触发器进行约束
二、主键(PrimaryKey)和外键(ForeignKey)
1、表中有一列或几列组合的值能唯一的标识表中的每一行,这样的列或多列组合(组合键)叫做表的主键
一个表只能有一个主键,可以没有外键,但通常都应当设一个外键。
2、外键是用来建立一种引用关系的,以确保"
子表"
中的某个数据项在主表中必须存在。
它是对应主键而言的,就是“子表"
对应主表的列,外键用来强制引用完整性。
数据库数据管理:
增、删、改、查
一、增:
单行插入:
INSERTINTOtable_name(column1,column2,...)
VALUES(value1,value2,...)
说明:
1、若没有指定column系统则会按表格内的栏位顺序填入资料。
2、栏位的数据类型和所填入的资料必须吻合。
一次必须插入整行
多行插入:
insertintotongxunlu('
姓名'
'
地址'
电子邮件'
)
selectSName,SAddress,SEmail
FromStudents
说明:
将Students表中的已经存在的'
数据插入到新的tongxunlu表中
这个tongxunlu表是事先已经存在的
二、删除
DeletefromStudentswhereSCode=2
说明:
删除所有的满足SCode=2条件的行,通过改变条件可以达到删除特定行的目的。
当不写where条件时DeletefromStudents该语句将删除掉Students中所有的数据,表本身还在.
droptableStudents是删除掉整个表,之后表就不存在了
TruncatetableStudents这个语句也是可以删除掉students表内的所有数据,速度比DeletefromStudents更快,但是Truncate不能用于有外键约束的表,这时只能用DeletefromStudents
三、改
updatestuScoreSetscore=score+5wherescore<
=95
语句功能说明:
将stuScore中满足score<
=95条件的那些行的score在原值基础上加上
通过更改where条件,可以达到特定的更改目的
查询:
查询时语法执行顺序:
select..from..where..groupby..having..orderby..)
比较难懂的地方--多表连接查询
一、内联接(innerjoin)
selectStudents.SName,Score.CourceID,Score.Score
fromStudets,Score
whereStudents.SCode=Score.StudentID
语句功能说明:
从Studets,Score两表中查找,条件是同一个学号SCode=StudentID的对应起来,取Studets表中该学号的SName(姓名),和Score表中的CourceID(课程号),Score(成绩)放在同一行显示出来
selectS.SName,C.CourseID,C.Score
FromStudentsASSINNERJOINScoreASC
on(S.SCode=C.StudentID)这个语句功能与上面的相同
二、外连接
1、左外联接
FromStudentsASS
LeftouterJOINScoreASConS.SCode=C.StudentID
语句功能:
Students有多少行就会返回多少行,显示Students中所有学员的所有科目及成绩,如果Score表中没有相应的数据,返回时会显示null
2、右外联接
右外联接会返回右表的行数及数据,左表相应的没有匹配数据时,在返回时会显示null
3、完全连接
selectsno,name,major
fromstudentsFULLJOINmajorsONstudents.mno=majors.mno
两边表中的内容全部显示
c.自身连接
selecto,c1.coursename,c1.pno,c2.coursename
fromcoursesc1,coursesc2wherec1.pno=o
自身连接采用别名解决问题。
三、交叉联接
selectlastname+firstnamefromlastnameCROSSJOINfirstanme
相当于做笛卡儿积
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1、一般用法:
SELECTColumnFROMTable;
例:
--从员工表里,选择姓名和工资
SELECTlast_name,salaryFROMemployees;
例:
--从员工表里,选择姓名和邮件,并将两列数据合成一列,以"
员工邮件"
为列名显示
SELECTlast_name+'
的电子邮件是:
'
+last_name+[email=]'
@'
[/email]AS"
员工电子邮件详细信息"
FROMemployees;
2、过滤重复行:
SELECTDISTINCTColumnFROMTable;
--统计员工表里的工种分为几类
SELECTDISTINCTjob_idFROMemployees;
3、增加选择条件:
SELECTColumnFROMTableWHEREcondition;
--从员工表里,选择工资高于的员工
SELECTlast_name,salaryFROMemployeesWHEREsalary>
5000;
--从员工表里,选择工资高于,并且属于号部门的员工
SELECTlast_name,salary,department_idFROMemployeesWHEREsalary>
5000ANDdepartment_id=80;
--从员工表里,选择工资高于,或者属于号部门的员工
SELECTlast_name,department_id,salary高于或者属于号部门的员工FROMemployeesWHEREsalary>
8000ORdepartment_id=80;
--从员工表里,选择年薪低于,并且没有奖金的员工信息
SELECTsalary*12年薪,*FROMemployeesWHEREsalary*12<
3000*12ANDcommission_pctISNULL;
例:
--从员工表里,选择工资在到之间(包含和)的员工信息
SELECT*FROMemployeesWHEREsalaryBETWEEN3000AND5000;
--从员工表里,选择属于号部门,号部门,号部门的员工
SELECTlast_name,department_idFROMemployeesWHEREdepartment_idIN(20,30,80);
--另一种写法:
WHEREdepartment_id=20ORdepartment_id=30ORdepartment_id=80;
--从员工表里,选择不属于,30,80号部门的员工
SELECTlast_name,department_idFROMemployeesWHEREdepartment_idNOTIN(20,30,80);
4、模糊查询:
SELECTColumnFROMTableWHEREkeywordsLIKE%_;
--从员工表里,选择姓名以B打头的所有员工信息
SELECT*FROMemployeesWHERElast_nameLIKE'
B%'
;
--从员工表里,选择姓名第二个字母是a的所有员工信息
_a%'
--从员工表里,选择姓名以A或B或C打头的员工信息
[A-C]%'
5、多表查询:
SELECTTable1.Column,Table2.ColumnFROMTable1,Table2WHERECondition;
--查询员工表里,所有员工所属的部门名字
SELECTemployees.last_name,department.department_name
FROMemployees,department
WHEREemployees.department_id=department.department_id;
--查询查询工资高于的员工所属的部门
SELECTe.last_name,e.salary,d.department_nameFROMemployeese
INNERJOINdepartmentdONe.salary>
8000ANDe.department_id=d.department_id;
--查询所有员工所属的部门,即使该员工没有被分配任何部门
SELECTe.last_name,d.department_nameFROMemployeese
LEFTOUTERJOINdepartmentdONe.department_id=d.department_id;
--查询每个部门所属的员工,即使该部门没有任何员工
SELECTd.department_name,e.last_nameFROMemployeeseRIGHTOUTERJOINdepartmentdONe.department_id=d.department_id;
--查询所有部门以及所有员工,即使该部门没有任何员工或该员工没被分配任何部门
SELECTe.last_name,d.department_nameFROMemployeeseFULLOUTERJOINdepartmentdONe.department_id=d.department_id;
--查询员工Baida的经理是谁
SELECTe.last_name雇员,m.last_name经理FROMemployeese,employeesmWHEREe.manager_id=m.employee_idANDe.last_name='
Baida'
====================================================================================================================
一、简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。
它们分别说明所查询列、查询的
表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
SELECTnickname,email
FROMtesttable
WHEREname='
张三'
(一)选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列
例如,下面语句显示testtable表中所有列的数据:
SELECT*
2、选择部分列并指定它们的显示次序
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:
3、更改列标题
在选择列表中,可重新指定列标题。
定义格式为:
列标题=列名
列名列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列
标题:
SELECT昵称=nickname,电子邮件=email
4、删除重复行
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认
为ALL。
使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数
使用TOPn[PERCENT]选项限制返回的数据行数,TOPn说明返回n行,而TOPnPERCENT时,说明n是
表示一百分数,指定返回的行数等于总行数的百分之几。
SELECTTOP2*
SELECTTOP20PERCENT*
(二)FROM子句
FROM子句指定SELECT语句查询及与查询相关的表或视图。
在FROM子句中最多可指定个表或视图,
它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列
所属的表或视图。
例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应
使用下面语句格式加以限定:
SELECTusername,citytable.cityid
FROMusertable,citytable
WHEREusertable.cityid=citytable.cityid
在FROM子句中可用以下两种格式为表或视图指定别名:
表名as别名
表名别名
例如上面语句可用表的别名格式表示为:
SELECTusername,b.cityid
FROMusertablea,citytableb
WHEREa.cityid=b.cityid
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。
SELECTa.au_fname+a.au_lname
FROMauthorsa,titleauthorta
(SELECTtitle_id,title
FROMtitles
WHEREytd_sales>
10000
)ASt
WHEREa.au_id=ta.au_id
ANDta.title_id=t.title_id
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。
(三)使用WHERE子句设置查询条件
WHERE子句设置查询条件,过滤掉不需要的数据行。
例如下面语句查询年龄大于的数据:
FROMusertable
WHEREage>
20
WHERE子句可包括各种条件运算符:
比较运算符(大小比较):
>
、>
=、=、<
、<
=、<
、!
<
范围运算符(表达式值是否在指定的范围):
BETWEEN…AND…
NOTBETWEEN…AND…
列表运算符(判断表达式是否为列表中的指定项):
IN(项,项……)
NOTIN(项,项……)
模式匹配符(判断值是否与指定的字符通配格式相符):
LIKE、NOTLIKE
空值判断符(判断表达式是否为空):
ISNULL、ISNOTNULL
逻辑运算符(用于多条件的逻辑连接):
NOT、AND、OR
1、范围运算符例:
ageBETWEEN10AND30相当于age>
=10ANDage<
=30
2、列表运算符例:
countryIN('
Germany'
China'
3、模式匹配符例:
常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。
可用于char、
varchar、text、ntext、datetime和smalldatetime等类型查询。
可使用以下通配字符:
百分号%:
可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
下划线_:
匹配单个任意字符,它常用来限制表达式的字符长度。
限制以A开头:
LIKE'
[A]%'
限制以A开头外:
[^A]%'
4、空值判断符例WHEREageISNULL
5、逻辑运算符:
优先级为NOT、AND、OR
(四)查询结果排序
使用ORDERBY子句对查询返回的结果按一列或多列排序。
ORDERBY子句的语法格式为:
ORDERBY{column_name[ASC|DESC]}[,…n]
其中ASC表示升序,为默认值,DESC为降序。
ORDERBY不能按ntext、text和image数据类型进行排序。
ORDERBYagedesc,useridASC
另外,可以根据表达式进行排序。
1.在查询结果中显示列名:
a.用as关键字:
selectnameas'
fromstudentsorderbyage
b.直接表示:
selectname'
2.精确查找:
a.用in限定范围:
select*fromstudentswherenativein('
湖南'
'
四川'
b.between...and:
select*fromstudentswhereagebetween20and30
c.“=”:
select*fromstudentswherename='
李山'
d.like:
select*fromstudentswherenamelike'
李%'
(注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。
所以若查询有“李”的所有对象,应该命令:
'
%李%'
若是第二个字为李,则应为'
_李%'
或'
_李'
_李_'
。
e.[]匹配检查符:
select*fromcourseswherecnolike'
[AC]%'
(表示或的关系,与"
in(...)"
类似,而且"
[]"
可以表示范围,如:
3.对于时间类型变量的处理
a.smalldatetime:
直接按照字符串处理的方式进行处理,例如:
select*fromstudentswherebirth>
='
1980-1-1'
andbirth<
='
1980-12-31'
4.聚合函数
a.count()求和,如:
selectcount(*)fromstudents(求学生总人数)(就是表内数据的总行数)
b.avg(列)求平均,如:
selectavg(mark)fromgradeswherecno=’B2’
c.max(列)和min(列),求最大与最小
5.分组group
常用于统计时,如分组查总数:
selectgender,count(sno)
fromstudents
groupbygender
(查看男女学生各有多少)
注意:
从哪种角度分组就从哪列"
groupby"
对于多重分组,只需将分组规则罗列。
比如查询各届各专业的男女同学人数,那么分组规则有:
届别(grade)、专业(mno)和性别(gender),所以有"
groupbygrade,mno,gender"
selectgrade,mno,gender,count(*)
groupbygrade,mno,gender
通常group还和having联用,比如查询门课以上不及格的学生,则按学号(sno)分类有:
selectsno,count(*)fromgrades
wheremark<
60
groupbysno
havingcount(*)>
1
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的
表格才能够得到结果的。
FROMtable1,table2
WHEREtable1.colum1=table2.column1
1.查询两个表格中其中column1值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。
整合性的查询:
SELECTCOUNT(*)
FROMtable_name
WHEREcolumn_name=x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 整理