SQL簡介&語法糖

一、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表舉例:


Student表

這里ID為主鍵

Subjects表

這里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ù)類型,....)


數(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:日期

My SQL
SQL Server

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ù)器 :詳細說明










未完待擼...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,255評論 0 0
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,071評論 5 115
  • 觀其大綱 page 01 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 M...
    周少言閱讀 3,255評論 0 33
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,335評論 0 7
  • 我是一場降臨在六月的雪, 迷茫中來到了我不該來的地方; 我學(xué)習(xí)著這個世界通用的語音, 卻發(fā)現(xiàn)和他們根本無法溝通; ...
    龍厭閱讀 384評論 0 1

友情鏈接更多精彩內(nèi)容