sql基本概念與語法(摘自w3school)

1、SQL DML 和 DDLmysql

能夠把 SQL 分爲兩個部分:數據操做語言 (DML) 和 數據定義語言 (DDL)SQL (結構化查詢語言)是用於執行查詢的語法。可是 SQL 語言也包含用於更新、插入和刪除記錄的語法。sql

查詢和更新指令構成了 SQL 的 DML 部分:數據庫

  • SELECT - 從數據庫表中獲取數據
  • UPDATE - 更新數據庫表中的數據
  • DELETE - 從數據庫表中刪除數據
  • INSERT INTO - 向數據庫表中插入數據

SQL 的數據定義語言 (DDL) 部分使咱們有能力建立或刪除表格。咱們也能夠定義索引(鍵),規定表之間的連接,以及施加表間的約束。函數

SQL 中最重要的 DDL 語句:spa

  • CREATE DATABASE - 建立新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 建立新表
  • ALTER TABLE - 變動(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 建立索引(搜索鍵)
  • DROP INDEX - 刪除索引

 

2、select語句orm

SELECT 列名稱 FROM 表名稱                           --*表示全部排序

SELECT DISTINCT 列名稱 FROM 表名稱               --去掉重複索引

 

3、where子句ci

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值字符串

下面的運算符可在 WHERE 子句中使用:

操做符

描述

=

等於

<>

不等於

>

大於

<

小於

>=

大於等於

<=

小於等於

BETWEEN

在某個範圍內

LIKE

搜索某種模式

註釋:在某些版本的 SQL 中,操做符 <> 能夠寫爲 !=

 

4、oderby 子句

ORDER BY 語句用於對結果集進行排序。

DESC 降序  ASC 升序

 

5、insert語句

INSERT INTO 表名稱 VALUES (1, 2,....)

 

6、update語句

UPDATE 表名稱 SET 列名稱 新值 WHERE 列名稱 某值

 

7、delete語句

DELETE FROM 表名稱 WHERE 列名稱 

 

8、Top子句

SELECT TOP number|percent column_name(s)

FROM table_name

 

9、like操做符

SELECT column_name(s)

FROM table_name

WHERE column_name LIKE pattern

SQL 通配符必須與 LIKE 運算符一塊兒使用。

在 SQL 中,可以使用如下通配符:

通配符

描述

%

替代一個或多個字符

_

僅替代一個字符

[charlist]

字符列中的任何單一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何單一字符

 

10、in 操做符

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1,value2,...)

 

11、between 操做符

SELECT column_name(s)

FROM table_name

WHERE column_name

BETWEEN value1 AND value2

如需使用上面的例子顯示範圍以外的人,請使用 NOT 操做符

 

12、Join

  • JOIN: 若是表中有至少一個匹配,則返回行
  • LEFT JOIN: 即便右表中沒有匹配,也從左表返回全部的行
  • RIGHT JOIN: 即便左表中沒有匹配,也從右表返回全部的行
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons, Orders

WHERE Persons.Id_P = Orders.Id_P

 

十3、inner join

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2 

ON table_name1.column_name=table_name2.column_name

註釋:INNER JOIN 與 JOIN 是相同的。

 

十4、left join

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2 

ON table_name1.column_name=table_name2.column_name

原始的表 (用在例子中的)

"Persons" 表:

Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

 

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65

左鏈接(LEFT JOIN)實例

如今,咱們但願列出全部的人,以及他們的定購 若是有的話。

您可使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

LEFT JOIN Orders

ON Persons.Id_P=Orders.Id_O

ORDER BY Persons.LastName

結果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George

 

LEFT JOIN 關鍵字會從左表 (Persons) 那裏返回全部的行,即便在右表 (Orders) 中沒有匹配的行。

 

十5、full join

原始的表 (用在例子中的)

"Persons" 表:

Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65

全鏈接(FULL JOIN)實例

如今,咱們但願列出全部的人,以及他們的定單,以及全部的定單,以及定購它們的人。

您可使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

FULL JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

結果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George

 

 

 

34764

FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回全部的行。若是 "Persons" 中的行在表 "Orders" 中沒有匹配,或者若是 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行一樣會列出。

十7、Union操做符

SQL UNION 語法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

註釋:默認地,UNION 操做符選取不一樣的值。若是容許重複的值,請使用 UNION ALL

SQL UNION ALL 語法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 結果集中的列名老是等於 UNION 中第一個 SELECT 語句中的列名。

下面的例子中使用的原始表:

Employees_China:

E_ID

E_Name

01

Zhang, Hua

02

Wang, Wei

03

Carter, Thomas

04

Yang, Ming

Employees_USA:

E_ID

E_Name

01

Adams, John

02

Bush, George

03

Carter, Thomas

04

Gates, Bill

使用 UNION 命令

實例

列出全部在中國和美國的不一樣的僱員名:

SELECT E_Name FROM Employees_China

UNION

SELECT E_Name FROM Employees_USA

 

結果

E_Name

Zhang, Hua

Wang, Wei

Carter, Thomas

Yang, Ming

Adams, John

Bush, George

Gates, Bill

註釋:這個命令沒法列出在中國和美國的全部僱員。在上面的例子中,咱們有兩個名字相同的僱員,他們當中只有一我的被列出來了。UNION 命令只會選取不一樣的值。

UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出全部的值。

實例:

列出在中國和美國的全部的僱員:

SELECT E_Name FROM Employees_China

UNION ALL

SELECT E_Name FROM Employees_USA

結果

E_Name

Zhang, Hua

Wang, Wei

Carter, Thomas

Yang, Ming

Adams, John

Bush, George

Carter, Thomas

Gates, Bill

 

十8、select into 語句

SELECT INTO 語句從一個表中選取數據,而後把數據插入另外一個表中。

SELECT INTO 語句經常使用於建立表的備份復件或者用於對記錄進行存檔。

您能夠把全部的列插入新表:

SELECT *

INTO new_table_name [IN externaldatabase] 

FROM old_tablename

 

或者只把但願的列插入新表:

SELECT column_name(s)

INTO new_table_name [IN externaldatabase] 

FROM old_tablename

 

十9、create table

數據類型(data_type)規定了列可容納何種數據類型。下面的表格包含了SQL中最經常使用的數據類型:

數據類型

描述

 integer(size)

 int(size)

 smallint(size)

 tinyint(size)

 

僅容納整數。在括號內規定數字的最大位數。

 decimal(size,d)

 numeric(size,d)

 

容納帶有小數的數字。

"size" 規定數字的最大位數。"d" 規定小數點右側的最大位數。

char(size)

容納固定長度的字符串(可容納字母、數字以及特殊字符)。

在括號中規定字符串的長度。

varchar(size)

容納可變長度的字符串(可容納字母、數字以及特殊的字符)。

在括號中規定字符串的最大長度。

date(yyyymmdd)

容納日期。

 

二10、sql 約束

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

二11、foreign key

FOREIGN KEY 約束用於預防破壞表之間鏈接的動做。

FOREIGN KEY 約束也能防止非法數據插入外鍵列,由於它必須是它指向的那個表中的值之一

CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

)

二12、check 約束

若是對單個列定義 CHECK 約束,那麼該列只容許特定的值。

若是對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

二十3、default 約束

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes'

)

 

二十4、create index 索引

您能夠在表中建立索引,以便更加快速高效地查詢數據。

用戶沒法看到索引,它們只能被用來加速搜索/查詢。

CREATE INDEX PersonIndex

ON Person (LastName DESC)

 

二十5、alter

ALTER TABLE table_name

ADD column_name datatype

ALTER TABLE table_name 

DROP COLUMN column_name

ALTER TABLE table_name

ALTER COLUMN column_name datatype

 

二十6、AUTO INCREMENT 字段

默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1

ALTER TABLE Persons AUTO_INCREMENT=100

 

二十7、create view

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

 

SQL 更新視圖

您可使用下面的語法來更新視圖:

SQL CREATE OR REPLACE VIEW Syntax

CREATE OR REPLACE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

SQL 撤銷視圖

您能夠經過 DROP VIEW 命令來刪除視圖。

SQL DROP VIEW Syntax

DROP VIEW view_name

 

二十8、sql 日期

MySQL Date 函數

下面的表格列出了 MySQL 中最重要的內建日期函數:

函數

描述

NOW()

返回當前的日期和時間

CURDATE()

返回當前的日期

CURTIME()

返回當前的時間

DATE()

提取日期或日期/時間表達式的日期部分

EXTRACT()

返回日期/時間按的單獨部分

DATE_ADD()

給日期添加指定的時間間隔

DATE_SUB()

從日期減去指定的時間間隔

DATEDIFF()

返回兩個日期之間的天數

DATE_FORMAT()

用不一樣的格式顯示日期/時間

 

SQL Server Date 函數

下面的表格列出了 SQL Server 中最重要的內建日期函數:

函數

描述

GETDATE()

返回當前日期和時間

DATEPART()

返回日期/時間的單獨部分

DATEADD()

在日期中添加或減去指定的時間間隔

DATEDIFF()

返回兩個日期之間的時間

CONVERT()

用不一樣的格式顯示日期/時間

SQL Date 數據類型

MySQL 使用下列數據類型在數據庫中存儲日期或日期/時間值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式 YYYY 或 YY

SQL Server 使用下列數據類型在數據庫中存儲日期或日期/時間值:

  • DATE - 格式 YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式惟一的數字

二十9、數據類型

不一樣數據的區別  (***********************

 

三10、函數

在 SQL Server 中的合計函數

函數

描述

AVG(column)

返回某列的平均值

BINARY_CHECKSUM

 

CHECKSUM

 

CHECKSUM_AGG

 

COUNT(column)

返回某列的行數(不包括NULL值)

COUNT(*)

返回被選行數

COUNT(DISTINCT column)

返回相異結果的數目

FIRST(column)

返回在指定的域中第一個記錄的值(SQLServer2000 不支持)

LAST(column)

返回在指定的域中最後一個記錄的值(SQLServer2000 不支持)

MAX(column)

返回某列的最高值

MIN(column)

返回某列的最低值

STDEV(column)

 

STDEVP(column)

 

SUM(column)

返回某列的總和

VAR(column)

 

VARP(column)

相關文章
相關標籤/搜索