SQL数据库基础知识-巩固篇<一>、、、
===============
首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了>
MySQL-57 DataBase
MS-SQLServer-2000 DataBase
SQL的含义:结构化查询语言(Structured Query Language)简称SQL
作用:SQL(Structured Query Language,结构化查询语言)是一种用于操作数据库的语言。
结构化查询语言包含6个部分:
一:数据查询语言(DQL:Data Query Language):也称为“数据检索语句”,用以从表中获得数据,关键字有:SELECT WHERE,ORDER BY,GROUP BY和HAVING
二:数据操作语言(DML:Data Manipulation Language):包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
三:事务处理语言(TPL):TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四:数据控制语言(DCL):
五:数据定义语言(DDL):包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引
六:指针控制语言(CCL):像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
==================
结构化查询语言中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型。
==================
第一部分:SQL基础知识:SQL入门知识、、、
SQL 是用于访问和处理数据库的一种计算机语言。
常用到的数据库有:Oracle, SQL Server, DB2, Access 、MySQL等等。
======================
什么是 SQL?
SQL 指结构化查询语言
SQL 使我们有能力访问数据库
SQL 是一种 ANSI 的标准计算机语言
编者注:ANSI,美国国家标准化组织
==========
SQL常用的对数据库做的一些基础的操作:
SQL 能做什么?
SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限
=======
SQL 是一门 ANSI 标准的计算机语言,用来访问和操作数据库系统。
SQL语言中常用的一些关键词:SELECT、UPDATE、DELETE、INSERT、WHERE
一定要记住,SQL 对大小写不敏感!
分号是在数据库系统中分隔每条 SQL 语句的标准方法,
===========
RDBMS 指的是关系型数据库管理系统。MS Access, SQL Server, MySQL,IBM DB2,
RDBMS 中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成。
===============
SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
一、SQL (结构化查询语言)是用于执行查询的语法。
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
======================
二、SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。或是修改表的属性
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
======================
需要用到的数据库表:
SELECT 语法:
1.SELECT 列名称 FROM 表名称
2.SELECT * FROM 表名称
例子:
1.需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表),
SELECT LastName,FirstName FROM Persons
2.从 "Persons" 表中选取所有的列。
SELECT * FROM Persons
结果集---result-set:SELECT 语句用于从表中选取数据。然后将选取的数据存储在一个结果表中(称为结果集)。
=======================
DISTINCT 语法:不重复的显示查询结果集,即:查询的数据中重复的数据只显示一次
1.SELECT DISTINCT 列名称 FROM 表名称
例子:
1.从 Company" 列中仅选取唯一不同的值,
SELECT DISTINCT Company FROM Orders
====================-==
WHERE 子句语法:有条件地从表中选取数据,
1.SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
where子句中的中常用的运算符:
=等于
<>不等于 或是 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
例子:
1.选取居住在城市 "Beijing" 中的人
SELECT * FROM Persons WHERE City='Beijing'
单引号使用:
数值:这是正确的:SELECT * FROM Persons WHERE Year>1965
文本值:这是正确的:SELECT * FROM Persons WHERE FirstName='Bush'
===============================
AND 运算符:
例子:
1.使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
OR 运算符:
例子
1.使用 OR 来显示所有姓为 "Carter" 或者名为 "Thomas" 的人:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
AND 和 OR 运算符结合使用:
例子
1.SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
==============================
ORDER BY 语法:用于给查询的结果集排序 order by 默认是升序排列,desc降序排列 asc升序排列
升序排列1序号的数据<2序号的数据<3序号的数据 同时:数据表一般都是自上而下开始,123456、、(顶部的数据小,底部的数据大)
========================
INSERT语法:
1.INSERT INTO 表名称 VALUES (值1, 值2,....)
2.INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
例子
1.在person表中插入新的一行数据
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
2.在person表的指定列中插入数据
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
====================
Update语法:
1.UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例子
1.为 lastname 是 "Wilson" 的人添加 firstname:为Fred
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
更新某一行中的若干列
2.为 lastname 是 "Wilson" 的人修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'WHERE LastName = 'Wilson'
=====================
DELETE 语法:DELETE 语句用于删除表中的行。
1.DELETE FROM 表名称 WHERE 列名称 = 值
例子
1.删除lastname 是Wilson的那行数据
DELETE FROM Person WHERE LastName = 'Wilson'
2.可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或是
DELETE * FROM table_name
===============================
第二部分:SQL-进阶部分、、、
需要用到的数据库表:
TOP 句子:
1.SQL Server 的语法:
SELECT TOP number|percent column_name(s) FROM table_name
2.MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的
MySQL 语法:
SELECT column_name(s) FROM table_name LIMIT number
===============
TOP使用的例子
1.从上面的 "Persons" 表中选取头两条记录。
SELECT TOP 2 * FROM Persons
2.从上面的 "Persons" 表中选取 50% 的记录。
SELECT TOP 50 PERCENT * FROM Persons
====================
LIKE 操作符 的语法:
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例子
1.从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:
SELECT * FROM Persons WHERE City LIKE 'N%'
2.从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:
SELECT * FROM Persons WHERE City LIKE '%g'
3.从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:
SELECT * FROM Persons WHERE City LIKE '%lon%'
4.从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:
SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
==============
SQL通配符语法:
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist] 或者 [!charlist] 不在字符列中的任
例子
1.从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人:
SELECT * FROM Persons WHERE City LIKE 'Ne%'
2.从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:
SELECT * FROM Persons WHERE City LIKE '%lond%'
3.从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
4.从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
5.从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
6.从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
===============
IN 操作符语法:
1.SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
例子
1.从上表中选取姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
===================
BETWEEN ... AND操作符的语法:
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
例子
1.以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人,
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
2.以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之外的人
SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
===================
Alias 别名的语法:
1.表中的别名语法
SELECT column_name(s) FROM table_name AS alias_name
2.列中的别名语法:
SELECT column_name AS alias_name FROM table_name
例子
1.有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。
SELECT po.OrderID, p.LastName, p.FirstName FROM Persons AS p, Product_Orders AS po WHERE p.LastName='Adams' AND p.FirstName='John'
不使用表的别名:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName FROM Persons, Product_Orders WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
2.列名别名:SELECT LastName AS Family, FirstName AS Name FROM Persons
=================
需要用到的数据库表:
Jion语法
主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。
例子
1.谁订购了产品,并且他们订购了什么产品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
2.列出所有人的定购,
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
================================
Join的四种类型:
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
=======================
需要用到的数据库表:
一、INNER JOIN 的语法:其实inner join 就是join
1.SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
例子
1.列出所有人的定购。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
=============================
需要用到的数据库表:
二、Left Join 的语法:
会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
1.SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
例子
1.列出所有的人,以及他们的定购 - 如果有的话。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
==================
需要用到的数据库表:
三、RIGHT JOIN 的语法:
会从右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
1.SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
例子
1.列出所有的定单,以及定购它们的人 - 如果有的话。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
====================
需要用到的数据库表:
四、FULL JOIN 的语法-全连接:
1.SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
例子
1.列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,
==========================
需要用到的数据库表:
UNION 操作符的语法:
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
1.SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL 语法:
1.SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
例子
1.列出所有在中国和美国的不同的雇员名:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
2.列出在中国和美国的所有的雇员:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
===================================================
1.创建数据库
CREATE DATABASE database_name
2.创建数据表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
=====================
SQL中的约束:
NOT NULL 不接受 NULL 值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
UNIQUE 唯一标识数据库表中的每条记录。
PRIMARY KEY 唯一标识数据库表中的每条记录。 主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
FOREIGN KEY 外键约束:个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
CHECK 用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
DEFAULT 用于向列中插入默认值。
===================
索引 INDEX 用于快速高效地查询数据。
DROP INDEX 删除索引
==============
ALTER 用于在已有的表中添加、修改或删除列。
1.在表中添加列,
LTER TABLE table_name ADD column_name datatype
2.删除表中的列,
ALTER TABLE table_name DROP COLUMN column_name
=============
AUTO INCREMENT 自动增长
=============
VIEW 视图
==================
日期:
Date 数据类型
1.MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY
2.SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的数字
====================================
数据类型:
text用于文本或文本与数字的组合。最多 255 个字符。
Byte允许 0 到 255 的数字。
Integer允许介于 -32,768 到 32,767 之间的数字。
Long允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字
Yes/No逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。在代码中,使用常量 True 和 False (等价于 1 和 0)
CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
====================
DBMS - 数据库管理系统(Database Management System)
RDBMS - 关系数据库管理系统(Relational Database Management System)IBM 公司发明了 RDBMS。
==================
SQL中常用的一些函数:
avg 平均值
count 统计
max 最大值
min 最小值
sum 求和
group by 对查询结果集进行分组
having 过滤
=========================
无法比较 NULL 和 0;它们是不等价的。因为:null是指不能为空的值,而0就是表示数值0
=====================
第三部分:基础的SQL知识检测题、、、
SQL 是用于访问和处理数据库的一种计算机语言、常用的数据库:SQL Server, DB2,MySQL、 Access
1 . SQL 指的是?
Structured Query Language
哪个 SQL 语句用于从数据库中提取数据?
SELECT
哪条 SQL 语句用于更新数据库中的数据?
UPDATE
哪条 SQL 语句用于删除数据库中的数据?
DELETE
哪条 SQL 语句用于在数据库中插入新的数据?
insert into
通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列?
SELECT FirstName FROM Persons
通过 SQL,您如何从 "Persons" 表中选取所有的列?
SELECT * FROM Persons
通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
SELECT * FROM Persons WHERE FirstName='Peter'
通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
SELECT * FROM Persons WHERE FirstName LIKE 'a%'
=================
判断题:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
哪条 SQL 语句可返回唯一不同的值?
SELECT DISTINCT
哪个 SQL 关键词用于对结果集进行排序?
ORDER BY
通过 SQL,您如何根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
SELECT * FROM Persons ORDER BY FirstName DESC
通过 SQL,您如何向 "Persons" 表插入新的记录?
INSERT INTO Persons VALUES ('Jimmy', 'Jackson')
通过 SQL,您如何向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
INSERT INTO Persons (LastName) VALUES ('Wilson')
您如何把 "Persons" 表中 "LastName" 列的 "Gates" 改为 "Wilson" ?
UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
通过 SQL,您如何在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
DELETE FROM Persons WHERE FirstName = 'Fred'
通过 SQL,您如何返回 "Persons" 表中记录的数目?
SELECT COUNT(*) FROM Persons
=====================
完整的测试题:您的回答:
1.SQL 指的是?
您的回答:Structured Query Language
2.哪个 SQL 语句用于从数据库中提取数据?
您的回答:SELECT
3.哪条 SQL 语句用于更新数据库中的数据?
您的回答:UPDATE
4.哪条 SQL 语句用于删除数据库中的数据?
您的回答:DELETE
5.哪条 SQL 语句用于在数据库中插入新的数据?
您的回答:INSERT INTO
6.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列?
您的回答:SELECT FirstName FROM Persons
7.通过 SQL,您如何从 "Persons" 表中选取所有的列?
您的回答:SELECT * FROM Persons
8.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName='Peter'
9.通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName LIKE 'a%'
10.请判断下列说法是否正确:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
您的回答:错误
正确答案:正确
11.通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
您的回答:SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
12.通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
您的回答:SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
13.哪条 SQL 语句可返回唯一不同的值?
您的回答:SELECT DISTINCT
14.哪个 SQL 关键词用于对结果集进行排序?
您的回答:ORDER BY
15.通过 SQL,您如何根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
您的回答:SELECT * FROM Persons ORDER BY FirstName DESC
16.通过 SQL,您如何向 "Persons" 表插入新的记录?
您的回答:INSERT INTO Persons VALUES ('Jimmy', 'Jackson')
17.通过 SQL,您如何向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
您的回答:INSERT INTO Persons (LastName) VALUES ('Wilson')
18.您如何把 "Persons" 表中 "LastName" 列的 "Gates" 改为 "Wilson" ?
您的回答:UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
19.通过 SQL,您如何在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
您的回答:DELETE FROM Persons WHERE FirstName = 'Fred'
20.通过 SQL,您如何返回 "Persons" 表中记录的数目?
您的回答:SELECT COUNT(*) FROM Persons
图片版:
========================================================
=====================