sql实例教程
A. sql server 2008怎么安装实例
1、首先,在安装文件setup.exe上,单击鼠标右键选择"以管理员的身份运行",
<img
alt="Win7
系统上安装SQL
Server
2008一步一步图解教程_downcc绿色资源网"
src="/upload/tech/UploadPic/2012-8/2012828143624635.jpg"/>
2、首先单击安装光盘中的setup.exe安装文件,打开如下所示的"SQL
Server安装中心"对话框:
3、选择左边的安装选项,单击右边的"全新SQL
Server独立安装或向现有安装添加功能"选项,
4、在打开的"SQL
Server
2008安装程序"对话框中,出现"安装程序支持规则"选项,可以看到,一些检查已经通过了,单击确定按钮,进入到下一步,
5、单击确定按钮之后,出现输入产品密钥的提示,这里我使用的密钥是企业版的:"JD8Y6-HQG69-P9H84-XDTPG-34MBB",单击下一步按钮继续安装,
6、在接下来的许可条款页面中选择"我接受许可条款"选项,单击下一步按钮继续安装
7、在出现的"安装程序支持文件"页面中,单击安装按钮继续
8、安装程序支持文件的过程
9、之后出现了"安装程序支持规则"页面,只有符合规则才能继续安装,单击下一步按钮继续安装
10、在"功能选择"页面中,单击全选按钮,并设置共享的功能目录,单击下一步继续
11、在"实例配置"页面中,选择默认实例,并设置是实例的根目录,单击下一步按钮继续
12、在"磁盘空间要求"页面中,显示了安装软件所需的空间,单击下一步继续,
13、在"服务器配置"页面中,根据需要进行设置,单击下一步按钮继续安装
14、在"数据库引擎配置"页面中,设置身份验证模式为混合模式,输入数据库管理员的密码,即sa用户的密码,并添加当前用户,单击下一步按钮继续安装
15、在"Analysis
Services配置"页面中,添加当前用户,单击下一步按钮
16、在"Reporting
Services配置"页面中,按照默认的设置,单击下一步按钮,
17、在"错误和使用情况报告"页面中,根据自己的需要进行选择,单击下一步按钮继续安装,
18、在"安装规则"页面中,如果全部通过,单击下一步按钮继续
19、在"准备安装"页面中,看到了要安装的功能选项,单击下一步继续安装
20、在"安装进度"页面中,可以看到正在安装SQL
Server
2008
21、经过漫长的等待,SQL
Server
2008安装过程完成,现在没有错误,我的第一次错误是在上边的那个步骤出现的,单击下一步按钮继续
22、在"完成"页面中,可以看到"SQL
Server
2008安装已成功完成"的提示,单击关闭按钮结束安装
23、启动SQL
Server
2008,选择开始菜单中的Microsoft
SQL
Server
2008下的SQL
Server配置管理器,启动SQL
Server服务
24、最后启动微软为我们提供的集成工具,按照上图中的选择SQL
Server
Manager
Studio选项打开,输入用户名和密码进入
B. SQL基础教程的目录
1.1运行SQL程序
1.2Microsoft Access
1.3Microsoft SQL Server
1.3.1SQL Server 2000
1.3.2SQL Server 2005/2008
1.4Oracle
1.5IBM DB2
1.6MySQL
1.7PostgreSQL 2.1表、列和行
2.1.1表
2.1.2列
2.1.3行
2.2主键
2.3外键
2.4联系
2.4.1一对一
2.4.2一对多
2.4.3多对多
2.5规范化
2.5.1第一范式
2.5.2第二范式
2.5.3第三范式
2.5.4其他范式
2.6示例数据库
2.6.1表authors
2.6.2表publishers
2.6.3表titles
2.6.4表titles_authors
2.6.5表royalties
2.7创建示例数据库 3.1SQL语法
3.2SQL标准和一致性
3.3标识符
3.4数据类型
3.5字符串类型
3.6二进制大型对象类型
3.7精确数字类型
3.8近似数字类型
3.9布尔类型
3.10日期和时间类型
3.11时间间隔类型
3.12唯一标识符
3.13其他数据类型
3.14空值 4.1使用SELECT和FROM检索列
4.2使用AS创建列的别名
4.3使用DISTINCT消除重复的行
4.4使用ORDER BY排序行
4.5使用WHERE筛选行
4.6使用AND、OR和NOT组合及求反条件
4.6.1AND操作符
4.6.2OR操作符
4.6.3NOT操作符
4.6.4AND、OR和NOT一起使用
4.7使用LIKE匹配模式
4.8使用BETWEEN进行范围筛选
4.9使用IN进行列表筛选
4.10使用IS NULL测试空值 5.1创建派生列
5.2执行算术运算
5.3确定计算的顺序
5.4使用||连接串
5.5使用SUBSTRING()提取子串
5.6使用UPPER()和LOWER()更改串的大小写
5.7使用TRIM()修整字符
5.8使用CHARACTER_LENGTH()得到串长度
5.9使用POSITION()查找子串
5.10执行日期及时间间隔运算
5.11获得当前日期和时间
5.12获得用户信息
5.13使用CAST()转换数据类型
5.14使用CASE计算条件值
5.15使用COALESCE()检查空值
5.16使用NULLIF()比较表达式 6.1使用聚合函数
6.2创建聚合表达式
6.3使用MIN()查找最小值
6.4使用MAX()查找最大值
6.5使用SUM()计算总和
6.6使用AVG()计算平均值
6.7使用COUNT()统计行数
6.8使用DISTINCT聚合不重复的值
6.9使用GROUP BY分组行
6.10使用HAVING筛选分组 7.1限定列名
7.2使用AS创建表的别名
7.3使用联结
7.4使用JOIN或WHERE创建联结
7.5使用CROSS JOIN创建交叉联结
7.6使用NATURAL JOIN创建自然联结
7.7使用INNER JOIN创建内联结
7.8使用OUTER JOIN创建外联结
7.9创建自联结 8.1理解子查询
8.2子查询语法
8.3子查询和联结
8.4简单子查询和相关子查询
8.4.1简单子查询
8.4.2相关子查询
8.5在子查询中限定列名
8.6子查询中的空值
8.7使用子查询作为列表达式
8.8使用比较操作符比较子查询的值
8.9使用IN测试集合成员资格
8.10使用ALL比较所有子查询的值
8.11使用ANY比较某些子查询的值
8.12使用EXISTS检测存在性
8.13比较等价查询 9.1使用UNION合并行
9.2使用INTERSECT查找相同行
9.3使用EXCEPT查找不同行 10.1显示表结构
10.2使用INSERT插入行
10.3使用UPDATE更新行
10.4使用DELETE删除行 11.1创建表
11.2理解约束
11.3使用CREATE TABLE创建新表
11.4使用NOT NULL禁止空值
11.5使用DEFAULT确定默认值
11.6使用PRIMARY KEY指定主键
11.7使用FOREIGN KEY指定外键
11.8使用UNIQUE确保值唯一
11.9使用CHECK创建检查约束
11.10使用CREATE TEMPORARY TABLE创建临时表
11.11使用CREATE TABLE AS利用已存在表创建新表
11.12使用ALTER TABLE修改表
11.13使用DROP TABLE删除表 12.1使用CREATE INDEX创建索引
12.2使用DROP INDEX删除索引 13.1使用CREATE VIEW创建视图
13.2通过视图检索数据
13.3通过视图修改数据
13.3.1通过视图插入行
13.3.2通过视图更新行
13.3.3通过视图删除行
13.4使用DROP VIEW删除视图 15.1动态统计
15.2产生序列
15.3发现等差数列、递增数列和等值数列
15.4限定返回行的数量
15.4.1Microsoft Access
15.4.2Microsoft SQL Server
15.4.3Oracle
15.4.4IBM DB2
15.4.5MySQL
15.4.6PostgreSQL
15.5分配排名
15.6计算修整均值
15.7随机选取行
15.8处理重复值
15.9创建电话列表
15.10检索元数据
15.10.1Microsoft Access
15.10.2Microsoft SQL Server
15.10.3Oracle
15.10.4IBM DB2
15.10.5MySQL
15.10.6PostgreSQL
15.11处理日期
15.11.1Microsoft Access
15.11.2Microsoft SQL Server
15.11.3Oracle
15.11.4IBM DB2
15.11.5MySQL
15.11.6PostgreSQL
15.12计算中值
15.13查询极值
15.14改变动态统计的中流
15.15旋转结果
15.16处理层次结构
索引
C. win10安装sql2000教程
方法/步骤
1
打开安装包,双击MS SQL2000 SERVER进去,找到Autorun.exe文件。
屏幕上出现SQL Server 2000的安装画面,它共有5个选项。选第1项“安装 SQL Server 2000组件”进行安装。
在安装画面中又出现3个选项,选择第1项“安装数据库服务器”。
系统进入正式安装的画面(“欢迎”窗口),单击【下一步】按钮,弹出“计算机名”窗口。
选择本地计算机,再单击【下一步】按钮
接下来安装程序会搜索这台计算机上已经安装的SQL Server组件,搜索完成后会弹出“安装选择”窗口。
选择【创建新的SQL Server实例,或安装“客户端工具”】单选按钮,单击【下一步】按钮,弹出“用户信息”窗口。
点击【下一步】按钮。安装程序弹出对话框,询问用户是否同意软件的使用协议。如果用户同意,则系统继续进行后继操作,弹出“安装定义”窗口。
选择【服务器和客户端工具】,
单击【下一步】按钮,弹出“实例名”窗口。
选择安装为默认实例,
直接单击【下一步】按钮,弹出“安装类型”窗口。
选择【典型】继续点下一步安装,单击【下一步】按钮,继续安装SQL Server 2000,弹出“服务帐户”窗口。
选择【对每个服务使用同一帐户,自动启动SQL Server服务】,这时要注意,服务器设置要选择【使用本地系统帐户】,不要选择【使用域用户帐户】,否则安装《杏林神指》数据库时无法通过sa密码验证。单击【下
一步】按钮,弹出“身份验证模式”窗口。
sql2000安装步骤 sql2000数据库安装教程
选择【混合模式(Windows身份验证和 SQL Server身份验证)】单选按钮,
设置密码后点击下一步按钮,点【完成】
至此,SQL Server 2000的安装结束。
D. 如何用python写sql
python可以利用pymysql模块操作数据库。
什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
PyMySQL 安装
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。
如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:
$ pip3 install PyMySQL
如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
$ git clone https://github.com/PyMySQL/PyMySQL$ cd PyMySQL/$ python3 setup.py install
2、如果需要制定版本号,可以使用 curl 命令来安装:
$ # X.X 为 PyMySQL 的版本号$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz$ cd PyMySQL*$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录
注意:请确保您有root权限来安装上述模块。
安装的过程中可能会出现"ImportError: No mole named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools找到各个系统的安装方法。
Linux 系统安装实例:
$ wget https://bootstrap.pypa.io/ez_setup.py$ python3 ez_setup.py
数据库连接
连接数据库前,请先确认以下事项:
您已经创建了数据库 TESTDB.
在TESTDB数据库中您已经创建了表 EMPLOYEE
EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
在你的机子上已经安装了 Python MySQLdb 模块。
如果您对sql语句不熟悉,可以访问我们的SQL基础教程
- Database version : 5.5.20-log
- ..................................user_id = "test123"password = "password"con.execute('insert into Login values( %s, %s)' % (user_id, password))..................................
fetchone():该方法获取下一个查询结果集。结果集是一个对象
fetchall():接收全部的返回结果行.
rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。
- fname=Mac, lname=Mohan, age=20, sex=M, income=2000
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(rability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
实例:
以下实例链接 Mysql 的 TESTDB 数据库:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.data = cursor.fetchone()
print ("Database version : %s " % data)
# 关闭数据库连接db.close()
执行以上脚本输出结果如下:
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 关闭数据库连接db.close()
数据库插入操作
以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 插入语句sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try: # 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()except: # 如果发生错误则回滚
db.rollback()
# 关闭数据库连接db.close()
以上例子也可以写成如下形式:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 插入语句sql = "INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('%s', '%s', %s, '%s', %s)" % ('Mac', 'Mohan', 20, 'M', 2000)try: # 执行sql语句
cursor.execute(sql)
# 执行sql语句
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭数据库连接db.close()
以下代码使用变量向SQL语句中传递参数:
数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
实例:
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 查询语句sql = "SELECT * FROM EMPLOYEE
WHERE INCOME > %s" % (1000)try: # 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results: fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income ))except: print ("Error: unable to fetch data")
# 关闭数据库连接db.close()
以上脚本执行结果如下:
数据库更新操作
更新操作用于更新数据表的的数据,以下实例将 TESTDB 表中 SEX 为 'M' 的 AGE 字段递增 1:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭数据库连接db.close()
删除操作
删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:
实例(Python 3.0+)
#!/usr/bin/python3
import pymysql
# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标 cursor = db.cursor()
# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()except: # 发生错误时回滚
db.rollback()
# 关闭连接db.close()
执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
实例
实例(Python 3.0+)
# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)try: # 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()except: # 发生错误时回滚
db.rollback()
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
错误处理
DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:
异常
描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
E. 《Oralce数据库SQL和pl_sql实例教程》txt全集下载
Oralce数据库SQL和pl_sql实例教程 txt全集小说附件已上传到网络网盘,点击免费下载:
F. SQL Server SQL Agent服务使用教程小结
1.在查询分析器理启动或停止SQL Agent服务
启动
use master
go
xp_cmdshell 'net start SQLSERVERAGENT'
停止
use master
go
xp_cmdshell 'net stop SQLSERVERAGENT'
将服务的启动从手工方式改为自动启动方式
exec xp_cmdshell 'scm -Action 7 -Service mssqlserver -SvcStartType 2'
直接用命令行执行引号内的内容也可以。
2、启动不正常原因和处理
表面上看SQL Server agent 服务启动正常,但在查看作业的属性与作业历史记录时都出现如下错误:
错误14258:当SQLServerAgent正在启动时,无法执行此操作。请稍后再试。
可能原因:
选择了"使用 Windows NT 纤程",具体原因不明。
解决方法:
企业管理器--右键SQL实例--属性--处理器--取消选择"使用 Windows NT 纤程"
然后重新启动sql服务
修改了系统密码
解决方法:
a. 我的电脑--控制面板--管理工具--服务--右键 MS SQLServer--属性--登陆--登陆身份--选择"本地系统帐户"
或:
b.我的电脑--控制面板--管理工具--服务--右键 MS SQLServer--属性--登陆--登陆身份--选择"此帐户"--选择 administrator ,密码和确认密码中输入你的administrator密码.
两者的区别:
选择第一种方式,以后修改了administrator密码,不用再调整(但要求登陆操作系统的是系统管理员)
数据库非法DOWN机出现故障
解决方法:
用安装光盘重新安装,然后选择‘高级选项'—‘重建注册表',然后一路下去……
G. 如何使用SQL
掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。
练掌握SQL是数据库用户的宝贵财 富。掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。
在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。
INSERT语句
用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:
INSERT INTO EMPLOYEES VALUES
('Smith','John','1980-06-10',
'Los Angles',16,45000);
通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。
我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。
如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。
回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。
同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。
对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,2000年临近,请你最好还是使用四位来表示年份。
既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:
INSERT INTO EMPLOYEES VALUES
('Bunyan','Paul','1970-07-04',
'Boston',12,70000);
INSERT INTO EMPLOYEES VALUES
('John','Adams','1992-01-21',
'Boston',20,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Pocahontas','1976-04-06',
'Los Angles',12,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Bessie','1940-05-02',
'Boston',5,200000);
INSERT INTO EMPLOYEES VALUES
('Jones','Davy','1970-10-10',
'Boston',8,45000);
INSERT INTO EMPLOYEES VALUES
('Jones','Indiana','1992-02-01',
'Chicago',NULL,NULL);
在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号)。NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。
有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
VALUE(
'Indiana','Jones',
'1992-02-01','Indianapolis');
这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。
让我们来看一看上述INSERT语句的语法图:
INSERT INTO table
[(column { ,column})]
VALUES
(columnvalue [{,columnvalue}]);
和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。
SELECT语句
SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。
SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。
SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算—“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。
SELECT语句最简单的语法如下:
SELECT columns FROM tables;
当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。
让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。
假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:
SELECT BRANCH_OFFICE FROM EMPLOYEES;
以上SELECT语句的执行将产生如图2中表2所示的结果。
由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES;
这次查询的结果如表3所示。
现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。
同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。
假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:
SELECT BRANCH_OFFICE,FIRST_NAME,
LAST_NAME,SALARY,HIRE_DATE
FROM EMPLOYEES
ORDER BY SALARY DESC,
HIRE_DATE DESC;
这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。
将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:
SELECT * FROM EMPLOYEES;
这次查询返回整个EMPLOYEES表,如表1所示。
下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):
SELECT [DISTINCT]
(column [{, columns}])| *
FROM table [ {, table}]
[ORDER BY column [ASC] | DESC
[ {, column [ASC] | DESC }]];
定义选择标准
在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:
SELECT columns FROM tables [WHERE predicates];
WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones';
LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。
使用最多的六种比较
我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:
等于 =
不等于 <>
小于 <
大于 >
小于或等于 <=
大于或等于 >=
下面给出了不是基于等值比较的一个例子:
SELECT * FROM EMPLOYEES
WHERE SALARY > 50000;
这一查询将返回年薪高于$50,000.00的职员(参见表7)。
逻辑连接符
有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';
在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';
有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:
SELECT * FROM EMPLOYEES
WHERE NOT(BRANCH_OFFICE = 'Boston');
关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。
断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:
SELECT * FROM EMPLOYEES
WHERE (LAST_NAME = 'Jones'
AND FIRST_NAME = 'Indiana')
OR (LAST_NAME = 'Smith'
AND FIRST_NAME = 'Bessie');
SQL沿用数学上标准的表达式求值的约定—圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。
以上对逻辑连接符进行了说明,在对下面的内容进行说明之前,我们再一次对SELECT语句的语法进行更新:
SELECT [DISTINCT]
(column [{, column } ] )| *
FROM table [ { , table} ]
[ORDER BY column [ASC] | [DESC
[{ , column [ASC] | [DESC } ] ]
WHERE predicate [ { logical-connector predicate } ];
NULL和三值逻辑
在SQL中NULL是一个复杂的话题,关于NULL的详细描述更适合于在SQL的高级教程而不是现在的入门教程中进行介绍。但由于NULL需要进行特殊处理,并且你也很可能会遇到它,所以我们还是简略地进行一下说明。
首先,在断言中进行NULL判断时需要特殊的语法。例如,如果用户需要显示所有年薪未知的职员的全部信息,用户可以使用如下SELECT语句:
SELECT * FROM EMPLOYEES
WHERE SALARY IS NULL;
相反,如果用户需要所有已知年薪数据的职员的信息,你可以使用以下语句:
SELECT * FROM EMPLOYEES
WHERE SALARY IS NOT NULL;
请注意我们在列名之后使用了关键字IS NULL或IS NOT NULL,而不是标准的比较形式:COLUMN = NULL、COLUMN <> NULL或是逻辑操作符NOT(NULL)。
这种形式相当简单。但当你不明确地测试NULL(而它们确实存在)时,事情会变得很混乱。
例如,回过头来看我们图1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等级或年薪值都是未知的。这两个列都包含NULL。可以想象运行如下的查询:
SELECT * FROM EMPLOYEES
WHERE GRADE <= SALARY;
此时,Indiana Jones应该出现在结果表中。因为NULL都是相等的,所以可以想象它们是能够通过GRADE小于等于SALARY的检查的。这其实是一个毫无疑义的查询,但是并没有关系。SQL允许进行这样的比较,只要两个列都是数字类型的。然而,Indiana Jones并没有出现在查询的结果中,为什么?
正如我们早先提到过的,NULL表示未知的值(而不是象某些人所想象的那样表示一个为NULL的值)。对于SQL来说意味着这个值是未知的,而只要这个值为未知,就不能将其与其他值比较(即使其他值也是NULL)。所以SQL允许除了在true 和false之外还有第三种类型的真值,称之为“非确定”(unknown)值。
如果比较的两边都是NULL,整个断言就被认为是非确定的。将一个非确定断言取反或使用AND或OR与其他断言进行合并之后,其结果仍是非确定的。由于结果表中只包括断言值为“真”的行,所以NULL不可能满足该检查。从而需要使用特殊的操作符IS NULL和IS NOT NULL。
UPDATE语句
UPDATE语句允许用户在已知的表中对现有的行进行修改。
例如,我们刚刚发现Indiana Jones的等级为16,工资为$40,000.00,我们可以通过下面的SQL语句对数据库进行更新(并清除那些烦人的NULL)。
UPDATE EMPLOYEES
SET GRADE = 16, SALARY = 40000
WHERE FIRST_NAME = 'Indiana'
AND LAST_NAME = 'Jones';
上面的例子说明了一个单行更新,但是UPDATE语句可以对多行进行操作。满足WHERE条件的所有行都将被更新。如果,你想让Boston办事处中的所有职员搬到New York,你可以使用如下语句:
UPDATE EMPLOYEES
SET BRANCH_OFFICE = 'New York'
WHERE BRANCH_OFFICE = 'Boston';
如果忽略WHERE子句,表中所有行中的部门值都将被更新为'New York'。
UPDATE语句的语法流图如下面所示:
UPDATE table
SET column = value [{, column = value}]
[ WHERE predicate [ { logical-connector predicate}]];
DELETE语句
DELETE语句用来删除已知表中的行。如同UPDATE语句中一样,所有满足WHERE子句中条件的行都将被删除。由于SQL中没有UNDO语句或是“你确认删除吗?”之类的警告,在执行这条语句时千万要小心。如果决定取消Los Angeles办事处并解雇办事处的所有职员,这一卑鄙的工作可以由以下这条语句来实现:
DELETE FROM EMPLOYEES
WHERE BRANCH_OFFICE = 'Los Angeles';
如同UPDATE语句中一样,省略WHERE子句将使得操作施加到表中所有的行。
DELETE语句的语法流图如下面所示:
DELETE FROM table
[WHERE predicate [ { logical-connector predicate} ] ];
现在我们完成了数据操作语言(DML)的主要语句的介绍。我们并没有对SQL能完成的所有功能进行说明。SQL还提供了许多的功能,如求平均值、求和以及其他对表中数据的计算,此外SQL还能完成从多个表中进行查询(多表查询,或称之为连接)的工作。这种语言还允许你使用GRANT和REVOKE命令控制使用者的数据访问权限
H. 求详细的SQL语句教程视频
教程列表:
教程1:SQL
Server
2000数据库入门到全面精通教程
57讲
1.4G
教程2:SQL
2005数据库基础入门到提高教程+源码
830MB
教程3:SQL
Server
2005从入门到实践教学视频
596Mb
教程4:SQL
Server
2005范例开发教程418个实例视频+源码1.6GB
教程5:SQL
Server
2005数据库管理技术高级应用教程
565MB
教程6:SQL
Server
2008数据库基础入门到精通教程
1.4GB
教程7:SQL
Server
2008中文版标准视频教程
362MB
教程8:SQL
Server
2008数据库技术大全教学视频
204MB
教程9:SQL
Server
2008数据库高级视频教程
445MB
教程10:SQL
Server
2012数据库性能调优与安全实践视频教程
教程11:SQL
Server
2012从零开始学数据库管理开发入门到精通视频教程
I. 哪里可以找到SQL数据库视频课程
东南大学SQL数据库基础
全42讲 主讲-辛研
链接:https://pan..com/s/1D5Nmns5uQUaNSDV_8yFjsw
提取码:3je4
东南大学SQL数据库基础 全42讲 主讲-辛研 网络网盘
J. SQLServer2000教程的简介
本书从实用的角度出发,用87个实例详细讲述了使用SQLServer2000进行数据库开发的方法和技巧。全书分4个部分:SQLServer2000基础、SQLServer2000数据库、TransactSQL语言和数据库编程、数据库应用开发;由16章构成,主要内容包括:SQLServer2000概述、SQLServer2000安装和配置、SQLServer2000工具、数据库系统基础、SQLServer2000数据类型、SQLServer2000数据库创建与管理、SQLServer2000数据库表的创建和管理、SQL技术、TransactSQL程序设计、视图、索引、触发器、存储过程、SQLServer2000数据库的安全性管理、数据库的备份和恢复、基于Web的数据库应用;并在书尾给了9个上机练习指导。