一、SQL是什么
????SQL(Structured Query Language)結(jié)構(gòu)化查詢語言,由美國國家標(biāo)準(zhǔn)協(xié)會制定的標(biāo)準(zhǔn)。
二、幾種數(shù)據(jù)庫
? ? 1、微軟:sql server、access
? ? 2、瑞典MySQL:AB公司 mysql
????3、日本IBM:db2、informix
? ? 4、美國Sybase:sybase
????5、美國ORACLE:oracle? ??
可分為四類:
? ? 小型:access(小而可愛)
????中型:不好劃分
????大型:oracle(較安全)、sql server(稍弱)、sybase、informix(稍弱、安全[銀行多用])、mysql
? ? 海量:db2
? ? 補充:數(shù)據(jù)庫選擇的衡量:成本、功能多少、并發(fā)性(最終用戶是多少)、安全。
三、基本語法
這里拿一張Student表、一張Subjects表舉例:

這里ID為主鍵

這里ID為主鍵
增:
單條插入:INSERT INTO Student (ID,Name,gender) VALUES (1,"ZhangSan","Nan")?
多條插入:INSERT INTO Student (ID,Name,gender) VALUES (2,"WangSan","Nan"),(3,"LiSan","Nv")
刪:
刪除某行:DELETE FROM Student WHERE ID = 2
刪除所有:DELETE FROM Student 或者?DELETE * FROM Student
改:
單條更改:UPDATE Student SET Name="LaLa" WHERE gender='Nan'
所有g(shù)ender為Nan的學(xué)生名字都改為LaLa了
多條件更改:UPDATE Student SET Name="Sun" WHERE gender='Nan' and ID = 1
gender為Nan且ID為1的學(xué)生名字改為Sun了
查:
查所有:SELECT * FROM Student
*表示所有字段
查所有學(xué)生性別: SELECT gender FROM Student
這里有多少學(xué)生性別,就會都拉出來,但是學(xué)生就只有兩個性別。這里可以用:DISTINCT
不重復(fù):SELECT DISTINCT gender FROM Student
查并排序:?ORDER BY (默認升序排序)
某屬性按照字母順序排序:SELECT ID,Name,gender FROM Student ORDER BY Name
某屬性按照字母逆序排序:SELECT ID,Name,gender FROM Student ORDER BY Name?DESC
多屬性排序:SELECT ID,Name,gender FROM Student ORDER BY Name,ID
先按照Name排序,再按照ID從小到大排序
多屬性逆序排序:SELECT ID,Name,gender FROM Student ORDER BY Name DESC,ID?ASC
先按照Name逆序排序,再按照ID從小到大排序
四、通配符
%? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?=》? ? ? ?替代一個或多個字符
_? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =》? ? ? ?僅替代一個字符
[charlist]? ? ? ? ? ? ? ? ? ? ? ? ? ? ?=》? ? ? ?字符列中的任何單一字符
[^charlist]或[!charlist]? ? ? ?=》? ? ? ?不在字符列中的任何單一字符
五、高級語法
TOP 子句:用于規(guī)定要返回的記錄的數(shù)目
SQL Server 的語法(前多少條):SELECT TOP 2 * FROM Student
SQL Server 的語法(百分比):SELECT TOP?20?PERCENT * FROM Student
MySQL 語法:SELECT *FROM Student LIMIT 5
Oracle 語法:SELECT *FROM StudentWHERE ROWNUM <= 2
LIKE操作符:用于在 WHERE 子句中搜索列中的指定模式
LIKE
SQL LIKE 操作符語法:?
SELECT * FROM Student WHERE Name LIKE 'S%'
找出名字以N開頭的數(shù)據(jù)
SELECT * FROM Student WHERE Name LIKE '%g'
找出名字以g結(jié)尾的數(shù)據(jù)
SELECT * FROM Student WHERE Name LIKE '%a%'
找出名字含有a的數(shù)據(jù)
NOT LIKE
SQL NOT LIKE 操作符語法:
SELECT * FROM Student WHERE Name NOT LIKE 'S%'
找出名字不以S開頭的數(shù)據(jù)
IN 操作符:允許我們在 WHERE 子句中規(guī)定多個值
SELECT 語句:SELECT * FROM Student WHERE Name IN ('Sun','LiSan')
BETWEEN 操作符:選取介于兩個值之間的數(shù)據(jù)范圍
SELECT 語句:SELECT * FROM Student WHERE Name BETWEEN 'Sun' AND 'WangWu'
顯示介于 "Sun"(包括)和 "WangWu"(不包括)之間的人
Alias(別名):列名稱和表名稱指定別名
表的 SQL Alias 語法:SELECT A.Name FROM Student AS A
列的 SQL Alias 語法:SELECT Name AS aa FROM Student
JOIN:根據(jù)兩個或多個表中的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)
SELECT引用兩個表語句: SELECT Student.ID,Student.Name,Subjects.Chinese,Subjects.English FROM Student,Subjects WHERE Student.ID = Subjects.ID
SELECT JOIN 語句:SELECT Student.ID,Student.Name,Subjects.Chinese,Subjects.English FROM Student INNER JOIN Subjects ON Student.ID = Subjects.ID
*JOIN 使用類型,以及它們之間的差異:
? ?1、JOIN: 如果表中有至少一個匹配,則返回行
? ? 2、LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
? ? 3、RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
? ? 4、FULL JOIN: 只要其中一個表中存在匹配,就返回行
UNION:操作符用于合并兩個或多個 SELECT 語句的結(jié)果集
請注意,UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類型。同時,每條 SELECT 語句中的列的順序必須相同。默認地,UNION 操作符選取不同的值。如果允許重復(fù)的值,請使用 UNION ALL
SELECT UNION 語句:select ID From Student UNION select ID From Subjects
SELECT INTO:語句可用于創(chuàng)建表的備份復(fù)件
從 "Student" 表中提取居住在 "Beijing" 的人的信息,創(chuàng)建了一個帶有兩個列的名為 "Persons_Order_Backup" 的表:SELECT LastName,Firstname INTO Persons_Order_Backup FROM Student WHERE Student.ID=1
創(chuàng)建一個名為 "Persons_Order_Backup" 的新表,其中包含了從 Student 和 Subjects 兩個表中取得的信息:SELECT Student.Name,Subjects.Chinese,Subjects.English INTO Persons_Order_Backup FROM Student INNER JOIN Subjects ON Student.ID=Subjects.ID
CREATE DATABASE:創(chuàng)建數(shù)據(jù)庫
SQL語句:CREATE DATABASE database_name
CREATE TABLE:用于創(chuàng)建數(shù)據(jù)庫中的表
SQL語句:CREATE TABLE 表名稱(列名稱1 數(shù)據(jù)類型,列名稱2 數(shù)據(jù)類型,列名稱3 數(shù)據(jù)類型,....)

Constraints:約束用于限制加入表的數(shù)據(jù)的類型
NOT NULL:不能為空
UNIQUE:約束唯一標(biāo)識數(shù)據(jù)庫表中的每條記錄;請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
PRIMARY KEY:主鍵
FOREIGN KEY:外鍵
CHECK:約束用于限制列中的值的范圍
DEFAULT:約束用于向列中插入默認值
CREATE INDEX:用于在表中創(chuàng)建索引(作用:在不讀取整個表的情況下,索引使數(shù)據(jù)庫應(yīng)用程序可以更快地查找數(shù)據(jù)。)
創(chuàng)建一個簡單的索引,名為 "PersonIndex",在 Students 表的 Name 列:CREATE INDEX PersonIndexON Students (Name)
DROP:可以輕松地刪除索引、表和數(shù)據(jù)庫
用于 Microsoft SQLJet (以及 Microsoft Access) 的語法:DROP INDEX index_name ON table_name
用于 MS SQL Server 的語法:DROP INDEX table_name.index_name
用于 IBM DB2 和 Oracle 語法:DROP INDEX index_name
用于 MySQL 的語法:ALTER TABLE table_name DROP INDEX index_name
ALTER:用于在已有的表中添加、修改或刪除列
SQL 語句添加:ALTER TABLE Student ADD Birthday date
SQL 語句修改:ALTER TABLE Student ALTER COLUMN Birthday year
SQL 語句刪除:ALTER TABLE Student DROP COLUMN Birthday
AUTO INCREMENT:新記錄插入表中時生成一個唯一的數(shù)字
MySQL 的語法:CREATE TABLE Persons(P_Id int NOT NULL AUTO_INCREMENT,PRIMARY KEY (P_Id))
SQL Server 的語法:CREATE TABLE Persons(P_Id int PRIMARY KEY IDENTITY)
Access 的語法:CREATE TABLE Persons(P_Id int PRIMARY KEY AUTOINCREMENT)
Oracle 的語法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
Oracle 語法解釋:建名為 seq_person 的序列對象,它以 1 起始且以 1 遞增。該對象緩存 10 個值以提高性能。CACHE 選項規(guī)定了為了提高訪問速度要存儲多少個序列值。
Date:日期


MySQL 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫中存儲日期或日期/時間值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY
SQL Server 使用下列數(shù)據(jù)類型在數(shù)據(jù)庫中存儲日期或日期/時間值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 唯一的數(shù)字
SQL語句:SELECT * FROM Student WHERE OrderDate='2008-12-26'(從表中選取 OrderDate 為 "2008-12-26" 的記錄)
NULL:值是遺漏的未知數(shù)據(jù)
IS NULL:SELECT Name FROM Student WHERE gender IS NULL
IS?NOT NULL:SELECT Name FROM Student WHERE gender IS NOT NULL
ISNULL()、NVL()、IFNULL() 和 COALESCE() 函數(shù)函數(shù)
SQL Server / MS Access語法:SELECT ID,2*(Chinese+ISNULL(English,0)) FROM Subjects
Oracle語法:SELECT ID,2*(Chinese+NVL(English,0)) FROM Subjects
MySQL語法:SELECT ID,2*(Chinese+IFNULL(English,0)) FROM Subjects? ? ?或者(OALESCE() 函數(shù)):SELECT ID,2*(Chinese+COALESCE(English,0)) FROM Subjects
數(shù)據(jù)類型:詳細說明
服務(wù)器 :詳細說明
未完待擼...