数据库高级教程(一)
来源:互联网 发布:php继承的几种方式 编辑:程序博客网 时间:2024/04/30 14:00
1.SQL TOP语句
TOP子句用于规定要返回的记录的数目
特别是对于很多条记录,比如数千或者上万条记录,TOP语句是非常有用的
注意:并非所有的语句都支持TOP语句
SQL server的语法
SELECT TOP number |percent column_name(s) FROM table_name
MySQL和Oracle 的SQL SELECT TOP是等价的
MYSQL语法
SELECT column_name(s)
FROM table_name
LIMIT number
例子
SELECT *from Persons LiMIT 5
Oracle语法
SELECT column_name(s) FROM table_name WHERE ROWNUM<=number
例子
SELECT * FROM Persons WHERE ROWNUM<=5
原始的表 Person
Id firstName LastName telePhoneNumber
1 xu xiao 18766565171
2 li ming 18766565172
3 zhang qian 18766565173
4 zhao ming 18766565174
5 zhou tong 18766565175
6 sun ti 18766565176
SQL TOP 实例
现在我们需要从上面的Person表中选取头两条数据。
则SELECT TOP 2 *FROM Person
则结果为
Id firstName LastName telePhoneNumber
1 xu xiao 18766565171
2 li ming 18766565172
SQL TOP PERCENT 实例
现在我们从上面的表中选取50%的记录
SELECT TOP 50 FROM Person
结果为
Id firstName LastName telePhoneNumber
1 xu xiao 18766565171
2 li ming 18766565172
3 zhang qian 18766565173
2.SQL LINK 操作符
LINK操作符用于在WHERE子句中搜索列中的指定模式。
SQL LINK操作符语法
SELECT column_name(s) FROM table_name WHERE column_name LINK pattern
原始的表
Id firstName LastName telePhoneNumber
1 xu xiao 18766565171
2 li ming 18766565172
3 zhang qian 18766565173
4 zhao ming 18766565174
5 zhou tong 18766565175
LinK操作符实例例1
现在我们从Person表中选取LastName以t开头的人。
SELECT *FROM Person where LastName LINK ‘t%’
结果为
Id firstName LastName telePhoneNumber
5 zhou tong 18766565175
注意 %可用于定义通配符(模式中缺少的字母)
例2
我们希望从Person表中选取LastName以n结尾的人
SELECT *FROM Person WHERE LastName LIKE=‘%n’
结果为
Id firstName LastName telePhoneNumber
3 zhang qian 18766565173
例3
我们希望从Person表中选取LastName中包含“in”的人
SELECT *FROM Person WHERE LastName LINK “%in%”
结果为
Id firstName LastName telePhoneNumber
3 li ming 18766565172
例4
NOT关键字 我们从表中选取LastName中不包含‘ing’的人
SELECT *FROM Person WHERE LastName NOT LINK ‘%ing%’
结果为Id firstName LastName telePhoneNumber
1 xu xiao 18766565171
3 zhang qian 18766565173
5 zhou tong 18766565175
3.SQL通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或者多个字符。
SQL通配符必须与LINK字符一起使用
在SQL中可以使用以下通配符
通配符 描述
% 替代一个或者多个字符
_ 仅替代一个字符
[charlist] 字符列中任何单一字符
[^charlist] 不在字符列中的任何单一字符
或者
[!charlist]
原始的表
Person表
Id firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
使用%通配符
例子1 现在我们将上面的Person表选取以“mi”开始的LastName的人
SELECT * FROM Person where LastName LIKE ‘mi%’
结果为
Id firstName LastName telePhone
2 wang ming 12345678901
使用_通配符
例
现在,我们希望从Person表中选取姓的第一个字符之后是ian的人
select *from Person where Link LastName=‘_ian’
结果为
Id firstName LastName telePhone
1 lin tian 12345678911
使用[charlist]通配符
例
我们选取名字中以w or t or a开头的人
select * from Person where Link '[wta%]'
结果为
2 wang ming 12345678901
3 tian zhong 12345678910
例
下面我们选取名字不以w or t or a开头的人
select *from Person where Link ‘[!wta%]’
结果为
1 lin tian 12345678911
用于我们在where子句中规定多个值
SQL IN语法
select column_name(s) from table_name where column_name IN (value1,value2,....)
原始的表
Person表
Id firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
实例现在我们希望选取姓为tian何zhong的人
select *from Person where LastName IN ('tian','zhong')
则,结果为
1 lin tian 12345678911
3 tian zhong 12345678910
5.SQL between操作符
用于where子句中 ,选取介于两个值之间的数据范围
语法
select column_name(s) from table_name where colume_name between value1 and value2
原始的表
Person表
Id firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
例现在我们以字母顺序选取介于lin (包括)和 tian(不包括) 的人
select *from Person where firstName between ‘lin’ and 'tian'
1 lin tian 12345678911
2 wang ming 12345678901
注意:不同数据库的between and 的开闭区间是不同的例2
选取上述例子中的显示范围之外的人
select *from Person where firstName Not between 'lin' and 'tian'
结果为
3 tian zhong 12345678910
6.SQL Alias(别名)
通过SQL,可以为列名称和表名称指定别名
表的SQL Alias语法
select column_name(s) from table_name as alien_name
列的SQL Alias语法
select column_name as alias_name from table_name
例
使用表名称别名
假设我们有两张表分别为“Person”表和“Person_one”表
我们分别为他们指定别名“p”和‘p_o’ 并列出 tian lin 的所有订单
select p_o.firstName,p.LastName,p.telePhone FROM Person as p,person_one as p_o
where p.LastName='tian' and p.firstName='lin'
不使用别名的select 语句
select Person_one.firstName,Person.LastName,p.telePhone FROM Person,Person_one where person.LastName='lian' and person.firstName='lin'
从上面看出,别名更易阅读和书写
例,使用一个列名别名
表Person
Id firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
则select FirstName as name,LastName as Family From Person
结果为
Name Family
lin tian
wang ming
tian zhong
7.SQL join
用于根据两个或者多个表中的列之间的关系,从这些表中查询数据
用于从两个或者更多的表中获取结果。
数据库中的表可以通过键将彼此联系起来,primary key是一个列,在该列中的每一行的值都是唯一的,在表中,每一个主键的值都是唯一的。这样的话,可以在不重复每个表中的数据外,把表间的数据交叉捆绑在一起。
表Person
Id_p firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
从上表中可以看出,Id_p是表Person表中的主键。及没有两行能够拥有相同的Id_p,即使两行中的姓名完全相同,Id_p也可以区分他们。
表number
Id_n number Id_p
1 99456 2
2 90300 2
3 98403 1
4 45986 1
5 24456 44
Id_n列是表number中的主键,同时,number中的Id_p用于引用Person表中的人。而不需要使用他们的姓名。
即Id_p把两张表联系了起来。
下面我们可以通过两个表的方式,从两个表中获取数据。
谁订购了产品,且他们订购了什么产品。
select Person.lastName,Person.firstName,number.number FROM Person,number Where Person.Id_p=number.Id_p
则结果为
firstName LastName number
lin tian 98403
lin tian 45986
wang ming 99456
wang ming 90300SQL join
除了上面的方法外,我们也可以用 关键词Join从两个表中获取数据。
我们希望列出所有人的订购,可以使用下面的SQL数据。
select Person.lastName,Person.firstName,number.number FROM Person INNER JOIN number on Person .Id_p=number.Id_p ORDER BY Person.LastName
结果集:
firstName LastName number
lin tian 98403
lin tian 45986
wang ming 99456
wang ming 90300注意:
除了上面使用的INNER JOIN (内连接),我们还可以使用其他链接
JOIN: 如果表中有至少一个匹配,则返回行。
LEFT JOIN 即使右表中无匹配,也从左表返回所有的行
RIGHT JOIN 即使左表中无匹配,也从右表返回所有的行
FULL JOIN 只要其中一个表中存在匹配,则会返回行。
下面具体介绍
(1)INNER jOIN 和JOIN是一样的
(2)LEFT JOIN 会从左表中返回所有的行,即使右表中没有匹配的行。
具体语法为 select column_name(s) from table_name1 LEFT JOIN table_name2 on table_name1.colunn_name=table2.colume
原始的表为
Person表
Id_p firstName LastName telePhone
1 lin tian 12345678911
2 wang ming 12345678901
3 tian zhong 12345678910
表number
Id_n number Id_p
1 99456 2
2 90300 2
3 98403 1
4 45986 1
5 24456 44
我们希望列出所有的人,以及他们的订购
select Person.firstName,Person.LastName,number.number From Person LEFT JOIN number ON Person.Id_P ORDER BY Person.LastName
结果集
为
firstName LastName number
lin tian 98403
lin tian 45986
wang ming 99456
wang ming 90300tian zhong
(3)RIGHT JOIN 关键字
在右表哪里返回所有的行,即使左表中没有匹配的行
语法为
select column_name(s) from table_name1 LEFT JOIN table_name2 on table_name1.colunn_name=table2.colume
原始的表同上
select Person.firstName,Person.LastName,number.number From Person RIGHT JOIN number ON Person.Id_P ORDER BY Person.LastName
firstName LastName number
lin tian 98403
lin tian 45986
wang ming 99456
wang ming 9030024456
(4) FULL JOIN 关键字
只要其中某个表存在匹配,就会返回行
select column_name(s) from table_name1 FULL JOIN table_name2 on table_name1.colunn_name=table2.colume
原始的表同上
现在我们希望列出所有的人,以及他们的订单,以及所有的订单,以及订购他们的人。
select Person.firstName,Person.LastName,number.number From Person FULL JOIN number ON Person.Id_P ORDER BY Person.LastName
firstName LastName number
lin tian 98403
lin tian 45986
wang ming 99456
wang ming 90300 tian zhong
24456
- 数据库高级教程(一)
- JSP数据库高级教程-高级数据库技术
- 数据库高级教程(二)
- 数据库高级教程(三)
- 疯狂坦克 高级教程(一)
- mysql高级教程(一)
- SQL的高级教程(一)
- JSP数据库高级教程-数据库
- JSP数据库高级教程-JSP基础
- VisualC#数据库高级教程文档分享
- python操作mysql数据库(高级教程)
- 【SQL高级教程】数据库学习笔记
- smarty精品教程一(高级篇)
- 百度搜索高级使用教程(一)
- DOS批处理高级教程(一) 批处理基础
- Python高级教程(一)面向对象
- SQL高级教程:SQL 创建数据库、表以及索引
- SQL DROP撤销索引、表以及数据库 高级教程
- ListView 实现阻尼回弹效果 并去除边缘阴影
- Unity 3D 游戏上线之后的流水总结。
- 学习内嵌ie
- 数学常数
- 微信企业号,报错误 errcode 60011 no privilege to access
- 数据库高级教程(一)
- CentOS 7 引导win7开机
- 醉左紫诅紫棕渍琢邹走醉追庄抓租驻诅兹
- easyUI的treegrid添加节点(append)时间过长,设置等待(wait)遮罩效果
- 综姿罪爪咨纂阻子浊卒足最琢揍诅抓驻桩
- 网球之网球赛事介绍
- 如何使用 Pylint 来规范 Python 代码风格
- 数据库索引
- 统计硬币问题