sql學習

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 運算符結合使用:

例子

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'
20.通過 SQL,您如何返回 "Persons" 表中記錄的數目?
SELECT COUNT(*) FROM Persons

=====================

圖片版:

 

======================================================== 

附錄部分:

=====================

常用的語法:

複製代碼
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)
主鍵 (Primary Key) 
組合鍵 (Composite Key)
ANSI(American National Standards Institute 美國國家標準化組織)
FOREIGN KEY 外鍵約束
PRIMARY KEY 主鍵約束
================
常用的連接查詢:
INNER JOIN:如果表中有至少一個匹配,則返回行
LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
FULL JOIN:只要其中一個表中存在匹配,則返回行

INNER JOIN: 返回記錄當兩個表有匹配。等值連接。

LEFT JOIN: 返回左表中所有的行,即使右表中沒有匹配。

RIGHT JOIN: 返回右表中所有的行,即使有在左表中沒有匹配。

FULL JOIN: 返回表中匹配的所有行。

SELF JOIN: 是用來連接表本身,如果表有兩張表,暫時改名至少在一個表中的SQL語句。

CARTESIAN JOIN: 返回來自兩個或更多個聯接的表的記錄的集合的笛卡爾乘積。

==================
SQL中的約束 (Constraints)
NOT NULL - 指示某列不能存儲 NULL 值。
UNIQUE - 保證某列的每行必須有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的一個特定的記錄。
FOREIGN KEY - 保證一個表中的數據匹配另一個表中的值的參照完整性。
CHECK - 保證列中的值符合指定的條件。
DEFAULT - 規定沒有給列賦值時的默認值。
=============
視圖 view
視圖是基於 SQL 語句的結果集的可視化的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。
=============
函數:

複製代碼
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;
複製代碼

 

====================
DDL - 數據定義語言:

命令 描述
CREATE 創建一個新的表,表的視圖,或者在數據庫中的對象
ALTER 修改現有的數據庫對象,例如一個表
DROP 刪除整個表,數據庫中的表或其他對象或視圖
DML - 數據操縱語言:

命令 描述
SELECT 從一個或多個表中檢索特定的記錄
INSERT 創建記錄
UPDATE 修改記錄
DELETE 刪除記錄
DCL - 數據控制語言:

命令 描述
GRANT 授予用戶權限
REVOKE 收回用戶授予的權限

=================================
數據完整性:
實體完整性: 表中沒有重複行

域完整性: 通過限制的類型,格式或值的範圍強制對於一個給定列的有效條目

參考完整性: 行不能被刪除,被其他記錄使用

用戶定義的完整性: 強制執行不屬於實體,域和參照完整性一些具體的業務規則
========================
事務具有以下四個標準屬性,通常由首字母縮寫ACID簡稱:

原子: 確保工作單元中的所有操作都成功完成; 否則,該事務被中止的故障點,操作回滾到操作之前的狀態。

一致性: 確保數據庫正確後成功提交事務更改狀態。

隔離: 事務操作彼此獨立和透明。

持久性: 可確保提交的事務的結果或仍然存在系統故障的情況下的作用。

命令:

COMMIT: 保存更改。

ROLLBACK: 回滾更改。

SAVEPOINT: 回滾事務組創建點

SET TRANSACTION: 事務放置的名稱。
=================
SQL注入:

常用的處理SQL注入的方式:

=====================


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章