SQL數(shù)據(jù)庫基礎知識-鞏固篇<一>、、、
首先展示兩款我個人很喜歡的數(shù)據(jù)庫-專用于平時個人SQL技術(shù)的練習<特點:體積小,好安裝和好卸載,功能完全夠用了> MySQL-57 DataBase
MS-SQLServer-2000 DataBase
SQL的含義:結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL 作用:SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)是一種用于操作數(shù)據(jù)庫的語言。 結(jié)構(gòu)化查詢語言包含6個部分: 二:數(shù)據(jù)操作語言(DML:Data Manipulation Language):包括動詞INSERT,UPDATE和DELETE。它們分別用于添加,修改和刪除表中的行。也稱為動作查詢語言。 三:事務處理語言(TPL):TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。 四:數(shù)據(jù)控制語言(DCL): 五:數(shù)據(jù)定義語言(DDL):包括動詞CREATE和DROP。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE 或 DROP TABLE);為表加入索引 六:指針控制語言(CCL):像DECLARE CURSOR,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作。 ================== 結(jié)構(gòu)化查詢語言中的五種數(shù)據(jù)類型:字符型,文本型,數(shù)值型,邏輯型和日期型。 ================== 第一部分:SQL基礎知識:SQL入門知識、、、SQL 是用于訪問和處理數(shù)據(jù)庫的一種計算機語言。 ========== ======= RDBMS 中的數(shù)據(jù)存儲在被稱為表(tables)的數(shù)據(jù)庫對象中。表是相關的數(shù)據(jù)項的集合,它由列和行組成。 ===============
SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù) ====================== CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫 ====================== 需要用到的數(shù)據(jù)庫表:
例子: SELECT LastName,FirstName FROM Persons 2.從 "Persons" 表中選取所有的列。 SELECT * FROM Persons 結(jié)果集---result-set:SELECT 語句用于從表中選取數(shù)據(jù)。然后將選取的數(shù)據(jù)存儲在一個結(jié)果表中(稱為結(jié)果集)。 ======================= 例子: SELECT DISTINCT Company FROM Orders ====================-== WHERE 子句語法:有條件地從表中選取數(shù)據(jù), where子句中的中常用的運算符: 例子: SELECT * FROM Persons WHERE City='Beijing' 單引號使用: 數(shù)值:這是正確的: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 運算符結(jié)合使用: 例子 SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter' ============================== ORDER BY 語法:用于給查詢的結(jié)果集排序 order by 默認是升序排列,desc降序排列 asc升序排列 升序排列1序號的數(shù)據(jù)<2序號的數(shù)據(jù)<3序號的數(shù)據(jù) 同時:數(shù)據(jù)表一般都是自上而下開始,123456、、(頂部的數(shù)據(jù)小,底部的數(shù)據(jù)大) ======================== 例子 INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing') 2.在person表的指定列中插入數(shù)據(jù) 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.可以在不刪除表的情況下刪除所有的行。這意味著表的結(jié)構(gòu)、屬性和索引都是完整的: DELETE FROM table_name 或是 DELETE * FROM table_name =============================== 第二部分:SQL-進階部分、、、需要用到的數(shù)據(jù)庫表:
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" 結(jié)尾的城市里的人: 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 ================= 需要用到的數(shù)據(jù)庫表:
例子 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的四種類型: ======================= 需要用到的數(shù)據(jù)庫表:
圖解:
例子 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName ============================= 需要用到的數(shù)據(jù)庫表:
圖解:
例子 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName ================== 需要用到的數(shù)據(jù)庫表:
圖解:
例子 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) 中沒有匹配的行。 ==================== 需要用到的數(shù)據(jù)庫表:
圖解:
例子 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" 中沒有匹配, ========================== 需要用到的數(shù)據(jù)庫表:
例子 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.創(chuàng)建數(shù)據(jù)庫 ===================== =================== ============== ============= ============= ================== 2.SQL Server 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫中存儲日期或日期/時間值: ==================================== ==================== ================== 無法比較 NULL 和 0;它們是不等價的。因為:null是指不能為空的值,而0就是表示數(shù)值0 ===================== 第三部分:基礎的SQL知識檢測題、、、SQL 是用于訪問和處理數(shù)據(jù)庫的一種計算機語言、常用的數(shù)據(jù)庫:SQL Server, DB2,MySQL、 Access 1 . SQL 指的是? 哪個 SQL 語句用于從數(shù)據(jù)庫中提取數(shù)據(jù)? 判斷題:當所列出的某個條件為 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 數(shù)據(jù)類型, 字段2 數(shù)據(jù)類型, ... ); 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.營業(yè)額超過 $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: 返回來自兩個或更多個聯(lián)接的表的記錄的集合的笛卡爾乘積。 ================== 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;
==================== 命令 描述 命令 描述 命令 描述 ================================= 域完整性: 通過限制的類型,格式或值的范圍強制對于一個給定列的有效條目 參考完整性: 行不能被刪除,被其他記錄使用 用戶定義的完整性: 強制執(zhí)行不屬于實體,域和參照完整性一些具體的業(yè)務規(guī)則 原子: 確保工作單元中的所有操作都成功完成; 否則,該事務被中止的故障點,操作回滾到操作之前的狀態(tài)。 一致性: 確保數(shù)據(jù)庫正確后成功提交事務更改狀態(tài)。 隔離: 事務操作彼此獨立和透明。 持久性: 可確保提交的事務的結(jié)果或仍然存在系統(tǒng)故障的情況下的作用。 命令: COMMIT: 保存更改。 ROLLBACK: 回滾更改。 SAVEPOINT: 回滾事務組創(chuàng)建點 SET TRANSACTION: 事務放置的名稱。 常用的處理SQL注入的方式: =====================
—————>>>>>I'm a 程序媛。。。.|web developer / designer / 請叫我最美女神 |
|
|
來自: 酒駕的酒瓶蓋 > 《數(shù)據(jù)庫》