SQL数据库基础知识-巩固篇<一>、、、
首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用了> MySQL-57 DataBase MS-SQLServer-2000 DataBase SQL的含义:结构化查询语言(Structured Query Language)简称SQL 作用:SQL(Structured Query Language,结构化查询语言)是一种用于操作数据库的语言。 结构化查询语言包含6个部分: 二:数据操作语言(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 是用于访问和处理数据库的一种计算机语言。 ========== ======= RDBMS 中的数据存储在被称为表(tables)的数据库对象中。表是相关的数据项的集合,它由列和行组成。 ===============
SELECT - 从数据库表中获取数据 ====================== CREATE DATABASE - 创建新数据库 ====================== 需要用到的数据库表:
例子: SELECT LastName,FirstName FROM Persons 2.从 "Persons" 表中选取所有的列。 SELECT * FROM Persons 结果集---result-set:SELECT 语句用于从表中选取数据。然后将选取的数据存储在一个结果表中(称为结果集)。 ======================= 例子: SELECT DISTINCT Company FROM Orders ====================-== WHERE 子句语法:有条件地从表中选取数据, where子句中的中常用的运算符: 例子: SELECT * FROM Persons WHERE City='Beijing' 单引号使用: 数值:这是正确的:SELECT * FROM Persons WHERE Year>1965 文本值:这是正确的:SELECT * FROM Persons WHERE FirstName='Bush' SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter' OR 运算符: 例子 SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter' AND 和 OR 运算符结合使用: 例子 SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter' ============================== ORDER BY 语法:用于给查询的结果集排序 order by 默认是升序排列,desc降序排列 asc升序排列 升序排列1序号的数据<2序号的数据<3序号的数据 同时:数据表一般都是自上而下开始,123456、、(顶部的数据小,底部的数据大) ======================== 例子 INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing') 2.在person表的指定列中插入数据 INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees') ==================== Update语法: 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 语句用于删除表中的行。 DELETE FROM Person WHERE LastName = 'Wilson' 2.可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的: DELETE FROM table_name 或是 DELETE * FROM table_name =============================== 第二部分:SQL-进阶部分、、、需要用到的数据库表:
TOP 句子: 2.MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的 =============== SELECT TOP 2 * FROM Persons 2.从上面的 "Persons" 表中选取 50% 的记录。 SELECT TOP 50 PERCENT * FROM Persons ==================== LIKE 操作符 的语法: 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] 不在字符列中的任意一个 例子 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 操作符语法: SELECT * FROM Persons WHERE LastName IN ('Adams','Carter') =================== BETWEEN ... AND操作符的语法: SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter' 2.以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之外的人 SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter' =================== Alias 别名的语法: 例子 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 2.列名别名: SELECT LastName AS Family, FirstName AS Name FROM Persons ================= 需要用到的数据库表:
例子 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的四种类型: ======================= 需要用到的数据库表:
图解:
例子 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName ============================= 需要用到的数据库表:
图解:
例子 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName ================== 需要用到的数据库表:
图解:
例子 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) 中没有匹配的行。 ==================== 需要用到的数据库表:
图解:
例子 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" 中没有匹配, ========================== 需要用到的数据库表:
例子 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.创建数据库 ===================== =================== ============== ============= ============= ================== 2.SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值: ==================================== ==================== ================== 无法比较 NULL 和 0;它们是不等价的。因为:null是指不能为空的值,而0就是表示数值0 ===================== 第三部分:基础的SQL知识检测题、、、SQL 是用于访问和处理数据库的一种计算机语言、常用的数据库:SQL Server, DB2,MySQL、 Access 1 . SQL 指的是? 哪个 SQL 语句用于从数据库中提取数据? 判断题:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
对的 通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录? 通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录? 哪条 SQL 语句可返回唯一不同的值? ===================== 图片版:
======================================================== 附录部分:===================== 常用的语法: Select SELECT 字段名 FROM 表名; Distinct SELECT DISTINCT 字段名 FROM 表名; Where SELECT 字段名 FROM 表名 WHERE 条件; And/Or SELECT 字段名 FROM 表名 WHERE 简单条件1 {[AND|OR] 简单条件2}+; In SELECT 字段名 FROM 表名 WHERE 字段名 IN ('值1', '值2', ...); Between SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN '值1' AND '值2'; Like SELECT 字段名 FROM 表名 WHERE 字段名 LIKE {模式}; Order By SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC, DESC]; Count SELECT COUNT(字段名) FROM 表名; Group By SELECT 字段1, SUM(字段2) FROM 表名 GROUP BY 字段1; Having SELECT 字段1, SUM(字段2) FROM 表名 GROUP BY 字段1 HAVING (栏位); Create Table CREATE TABLE 表名 (字段1 数据类型, 字段2 数据类型, ... ); Drop Table DROP TABLE 表名; Truncate Table TRUNCATE TABLE 表名; Insert Into INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); Update UPDATE 表名 SET 字段1 = [新值] WHERE 条件; Delete From DELETE FROM 表名 WHERE 条件; ================================== 简单的SQL语句及翻译 1.营业额超过 $1,000 的资料 SELECT Store_Name FROM Store_Information WHERE Sales > 1000; 2.选出所有 Sales 高于 $1,000 或是 Sales 在 $500 及 $275 之间的资料 SELECT Store_Name FROM Store_Information WHERE Sales > 1000 OR (Sales < 500 AND Sales > 275); 3.所有含盖 Los Angeles 或 San Diego 的资料 SELECT * FROM Store_Information WHERE Store_Name IN ('Los Angeles', 'San Diego'); 4.所有介于 January 6, 1999 及 January 10, 1999 中的资料 SELECT * FROM Store_Information WHERE Txn_Date BETWEEN 'Jan-06-1999' AND 'Jan-10-1999'; 5.依照 Sales 栏位的由大往小列出 Store_Information 表格中的资料:由小往大 (ascending) 或是由大往小 (descending) SELECT Store_Name, Sales, Txn_Date FROM Store_Information ORDER BY Sales DESC; 6. store_name 栏不是空白的资料 SELECT COUNT (Store_Name) FROM Store_Information WHERE Store_Name IS NOT NULL; 7.找出我们的表格中有多少个不同的 store_name, SELECT COUNT (DISTINCT Store_Name) FROM Store_Information; 8.取前客户表的前3个记录的例子: MS-SQL中 SELECT TOP 3 * FROM CUSTOMERS; MySQL中 SELECT * FROM CUSTOMERS LIMIT 3; Oracle中 SELECT * FROM CUSTOMERS WHERE ROWNUM <= 3; ============= 栏位 (column) 及列位 (row) INNER JOIN: 返回记录当两个表有匹配。等值连接。 LEFT JOIN: 返回左表中所有的行,即使右表中没有匹配。 RIGHT JOIN: 返回右表中所有的行,即使有在左表中没有匹配。 FULL JOIN: 返回表中匹配的所有行。 SELF JOIN: 是用来连接表本身,如果表有两张表,暂时改名至少在一个表中的SQL语句。 CARTESIAN JOIN: 返回来自两个或更多个联接的表的记录的集合的笛卡尔乘积。 ================== SUM() 语法 SELECT SUM(column_name) FROM table_name; AVG() 语法 SELECT AVG(column_name) FROM table_name COUNT() 语法 SELECT COUNT(column_name) FROM table_name; SELECT COUNT(*) FROM table_name; SELECT COUNT(DISTINCT column_name) FROM table_name; NULL 不计入 MAX() 语法 SELECT MAX(column_name) FROM table_name; MIN() 语法 SELECT MIN(column_name) FROM table_name;
==================== 命令 描述 命令 描述 命令 描述 ================================= 域完整性: 通过限制的类型,格式或值的范围强制对于一个给定列的有效条目 参考完整性: 行不能被删除,被其他记录使用 用户定义的完整性: 强制执行不属于实体,域和参照完整性一些具体的业务规则 原子: 确保工作单元中的所有操作都成功完成; 否则,该事务被中止的故障点,操作回滚到操作之前的状态。 一致性: 确保数据库正确后成功提交事务更改状态。 隔离: 事务操作彼此独立和透明。 持久性: 可确保提交的事务的结果或仍然存在系统故障的情况下的作用。 命令: COMMIT: 保存更改。 ROLLBACK: 回滚更改。 SAVEPOINT: 回滚事务组创建点 SET TRANSACTION: 事务放置的名称。 常用的处理SQL注入的方式: =====================
—————>>>>>I'm a 程序媛。。。.|web developer / designer / 请叫我最美女神 |
|