1. 程式人生 > >SQL——SQL語言全部關鍵字詳解

SQL——SQL語言全部關鍵字詳解

資料庫中我們做常用的就是SQL基本查詢語言,甚至有些人認為資料庫就是SQL,SQL就是資料庫。雖然這種觀點是錯誤的,但是也確實從一個方面體現了這種面向結果的查詢語言的重要性。

SQL語言基本定義

基本型別

SQL表中支援很多固有型別,包括:

型別 含義
char(n) 存放固定長度的字串,使用者指定長度為n。如果沒有使用n個長度則會在末尾新增空格。
varchar(n) 可變長度的字串,使用者指定最大長度n。char的改進版,大多數情況下我們最好使用varchar。
int 整數型別
smallint 小整數型別
numeric(p,d) 定點數,精度由使用者指定。這個數有p位數字(包括一個符號位)d位在小數點右邊。
real ,double precision 浮點數和雙精度浮點數。
float(n) 精度至少位n位的浮點數

特殊關鍵字

SQL中用很多關鍵字來表達CRUD的操作(增刪改查)。在這之外有很多特殊的關鍵字用來表示一些其他的含義,在總結SQL之前我們有必要進行一些瞭解。

型別 含義 示例
primary key 主鍵,後面括號中是作為主鍵的屬性 primary key(student_id)
foreign key references 外來鍵,括號中為外來鍵,references後為外來鍵的表 foreign key(course_id) references Course
not null 不為空,前面為屬性的定義 name varchar(10) not null

SQL插入/刪除/修改語句

SQL語法使用最多的就是查詢,除了查詢語句之外,其他的語句內容都很少。

型別 含義
create table 建立一張表
insert into…values 向表中插入一條資訊
delete from 從表中刪除一條資訊
update…set…where 在where的位置,更新內容為set的值
drop table 刪除表
alter table…add 向表中新增某個屬性
alter table…drop 將表中的某個屬性刪除

create table

create table Student(
ID varchar(20) not null,
name varchar(10) not null, 
age int,
class varchar(50),
primary key (ID));
建立一張叫做Student的表,表中有四個屬性,ID,姓名,年齡和班級,麼個屬性都有各自的型別。在這張表中主鍵是ID。

insert into…values

insert into Student(ID,name,class)
    values(10152510302,"Tom","class 1");

向表中新增一行資訊,一個名叫Tom的學生的資訊,因為age值不是not null,也就不是必須的,所以我們不新增age屬性也沒有問題。

delete from

delete form Student
    where name="Tom";

從表中刪除所有名字叫做Tom的資訊。如果delete from不寫where查詢條件表示清空這張表。

update…set…where

update Student
   set age=18
   where name="Tom";

將所有名字叫做Tom的資訊的年齡設定為18。

drop table

drop table Student;

刪除Student這張表。

alter table…add

alter table Student
   add sex varchar(5);

向表中新增性別屬性,並且將表中以存放的資訊的sex值設為null。所有通過這種方式新增的屬性都不能被設定為not null型別。

alter table…drop

alter table Student
   drop class;

從表中將class這一列屬性刪除。

SQL查詢語句

SQL最為常用的就是查詢,我們使用資料庫並從中查找出我們希望的內容。在這個過程中,我們可能要編寫很複雜的語句。這裡我們分類別詳細的總結具體的查詢情況。

單關係查詢

單關係查詢是指只一張表中的內容查詢有關資訊,不涉及其他的表,這是查詢中最為基本的一種情況。我們通過這種情況來總結一些基本的SQL語句編寫方法。下面先給出一些涉及到的關鍵字。

型別 含義
select 表示要查找出的表所含有的屬性
from 表示要操作的表
where 判斷條件,根據該判斷條件選擇資訊
distinct 在select後加入關鍵字distinct表示將結果去重
all 在select後加入關鍵字all表示不去重(預設)
and 在where中使用and表示將判斷條件連線起來
or 在where中使用or表示判斷條件多選一
not 在where中使用not表示判斷條件取反

在下面的查詢語句中,我們仍舊使用Student這張表來進行操作。先回顧一下這張表的欄位。

create table Student(
ID varchar(20) not null,
name varchar(10) not null, 
age int,
class varchar(50),
primary key (ID));

示例:

select name distinct
from Student
where age=18 and class="A";

在Student這張表中查詢所有年齡是18歲,並且班級是A的學生的名字,並將結果去重。

多關係查詢

多關係查詢是指在多個表中通過一些操作查找出希望的資訊。除去上面已有的關鍵字,我們還會使用到下面這些。

型別 含義
A,B 在from後面通過逗號連線多張表,表示將這些表進行笛卡兒積運算
natural join 將natural join關鍵字前後的兩張表進行自然連線運算
A join B using(c) 將A和B通過c屬性自然連線

為了能夠進行多關係查詢,我們需要有除了Student的另外一張表。再建一張表,表示上數學課的所有學生的資訊和成績情況。(實際上這兩張表建的都不好,不能滿足基本的幾個正規化,但是為了方便起見用來舉例)

create table Math(
   ID varchar(20) not null,
   name varchar(10) not null,
   sex varchar(5),
   score int,
   primary key(ID));

示例:

select score
form Student natural join Math
where class<>"B" and sex="men"

將Student表和Math表自然連線,所得的結果查詢出不是B班的男生的成績。

附加運算查詢

我們已經總結了單關係和多關係運算的查詢方法,但是隻有這些

型別 含義
as 將as前的關係起一個別名,在此語句中,可以用別名來代指這個表
* 在select中通過: “表名.*” 來表示查找出這個表中所有的屬性
order by 讓查詢結果中的資訊按照給定的屬性排序(預設升序,上小下大)
desc 在order by之後的屬性後使用,表示採用降序排序
asc 在order by之後的屬性後使用,表示採用升序排序(預設)
between 在where中使用between表示一個數在兩個數值之間取值
not between between的反義詞,在兩個數之外取值
union/union all 將兩個SQL語句做並運算,並且自動去重,新增all表示不去重
intersect/intersect all 將兩個SQL語句做交運算,並且自動去重,新增all表示不去重
except/except all 將兩個SQL語句做差運算,並且自動去重,新增all表示不去重
is null 在where中使用is null表示這個值是空值
is not null 在where中使用is not null表示這個值不是空值

示例:

select S.*
from Student as S,Math as M
where S.ID = M.ID
將Student和Math兩張表做笛卡兒積,結果中所有ID相同的資訊,取出他們屬於Student屬性的部分作為結果。
select name
from Student natural join Math
where class="A" and sex="women"
order by score desc;
在Student和Math自然連線的結果中,找出A班的女生的姓名,並且按照成績的降序把名字排列出來。
select name
from Math
where score between 60 and 90;
order by score asc;
在Math表中,找出成績在60分到90分之間的學生姓名,並且將姓名按照成績的升序排列出來。
(select name
from Student natural join Math
where class="A" and sex="women"
order by score desc)
union
(select name
from Math
where score between 60 and 90;
order by score);
將上面兩個查出來的結果做並集,並且去重。
select name
from Student 
where age is null;

在Student表中記錄的年齡值未填寫(為空)的所有人的姓名查出來。

聚集函式運算查詢

已經總結了SQL語句的很多關鍵字,現在我們可任意的進行排序、查詢。但是如果我們要獲得一些與資料相關的統計資訊,但是這些資訊在資料庫中沒有,那麼我們要使用SQL中的聚集函式來進行操作。

型別 含義
avg 平均值
min 最小值
max 最大值
sum 總和
count 計數
distinct 表示將distinct後的屬性去重
group by 將在group by上取值相同的資訊分在一個組裡
having 對group by產生的分組進行篩選,可以使用聚集函式

示例:

select class,avg(score) as avg_score
from Student natural join Math
group by class
having avg(score) < 60;

在Student與Math表自然連線的結果中按照班級分組,並且去除那些班級的平均成績沒到60的班級,剩下的班級和該班成績的平均數(該班成績的平均數這個屬性被重新命名為avg_score)作為一張新表被輸出出來。

相關推薦

【資料庫】SQL語言全部關鍵字

SQL語言基本定義 基本型別 SQL表中支援很多固有型別,包括: 型別 含義 char(n) 存放固定長度的字串,使用者指定長度為n。如果沒有使用n個長度則會在末尾新增空格。

SQL——SQL語言全部關鍵字

資料庫中我們做常用的就是SQL基本查詢語言,甚至有些人認為資料庫就是SQL,SQL就是資料庫。雖然這種觀點是錯誤的,但是也確實從一個方面體現了這種面向結果的查詢語言的重要性。 SQL語言基本定義 基本型別 SQL表中支援很多固有型別,包括:

SQL語言全部關鍵字

資料庫中我們做常用的就是SQL基本查詢語言,甚至有些人認為資料庫就是SQL,SQL就是資料庫。雖然這種觀點是錯誤的,但是也確實從一個方面體現了這種面向結果的查詢語言的重要性。SQL語言基本定義基本型別SQL表中支援很多固有型別,包括:型別 含義 char(n) 存放固

c語言extern關鍵字

在c語言中程式碼的執行順序是從上往下執行的,如果定義的函式或者變數在呼叫之後,那麼呼叫的時候編譯就會找不到需要使用的變數。這樣就會出現錯誤,如下程式碼: #include<stdio.h> int main(){ printf("%d",num); function();

SQL update select結合語句及應用

應用 comm 執行 sel ron 詳解 strong 閱讀 等於 SQL update select結合語句詳解及應用 2013年10月1日 MK 數據庫 19 閱讀 157639次 QL update select語句 最常用的update語法是: 1 2

MySQL批量SQL插入性能優化

inno user val 事務 優化 好的 維護 排列 測試結果 對於一些數據量較大的系統,數據庫面臨的問題除了查詢效率低下,還有就是數據入庫時間長。特別像報表系統,每天花費在數據導入上的時間可能會長達幾個小時或十幾個小時之久。因此,優化數據庫插入性能是很有意義的。經過對

SQL Server 事務隔離級別

完成 sql 事務 create 事務隔離 測試數據 span read type off SQL 事務隔離級別 概述 隔離級別用於決定如果控制並發用戶如何讀寫數據的操作,同時對性能也有一定的影響作用。 步驟 事務隔離級別通過影響讀操作來間接地影響寫操作;可以在回

MySQL常用SQL語句之SHOW語句

disable ret gpl cati host write flush none mat SQL語句之SHOW語句 SHOW DATABASES – 顯示當前所有數據庫的名稱 mysql> SHOW DATABASES; SHOW TABLES – 顯示當前數

六:SQL語句各種類型

variables reat 增長 字符集 varchar 內容 增刪 存在 dml 前言:SQL語句常見包括以下幾種類型   DDL:數據定義語句   DML:數據操作語言   DQL:數據查詢語言       DCL:數據控制語言 一:數據定義語言DDL   1.1:一

SQL Server 存儲過程

功能 需要 作用 sel 可能 csdn () 長度 緩存 轉自:https://blog.csdn.net/younghaiqing/article/details/62884658 一. 什麽是存儲過程 系統存儲過程是系統創建的存儲過程,目的在於能夠方便的從系統表中查詢

Sql Server存儲過程

ont 提高 exe object 不返回 src 應用程序 存在 color 基本存儲過程 if (exists (select * from sys.objects where name = ‘GetUser‘)) drop proc GetUser --判斷存儲

Java語言基礎final關鍵字

Java語言基礎之final     1.final是一個修飾符,可以修飾類、方法、變數     2. final修飾的類無法繼承     3. final修飾的方法無法被重寫     4. final修

Java呼叫SQL Server的儲存過程

                本文較長,包含了如下幾部分                    1使用不帶引數的儲存過程     使用 JDBC 驅動程式呼叫不帶引數的儲存過程時,必須使用 call SQL 轉義序列。不帶引數的 call 轉義序列的語法如下所示: {call procedure-name}

SQL server2014匯入匯出Excel

1.找到需要匯出的資料庫,進行如下操作: 2.選擇資料來源、Excel檔案路徑、Excel版本 注意:第一次使用時選擇Excel進行下一步時會報錯 需要下載安裝:Microsoft Office Access Database Engine 2007

pdm 匯入匯出sql,匯出資料字典

匯入sql: 匯出sql: 點選database->change current DBMS 設定好需要的資料庫型別,這裡選擇mysql5.0點選確定 在點選database->generate database 選擇路徑,即可匯出 匯出資料字典

MS SQL Server 資料庫連線字串

問題 : 超時時間已到。在從池中獲取連線之前超時時間已過。出現這種情況可能是因為所有池連線都已被使用並已達到最大池大小。 解決辦法  1. 在程式碼裡面 , 把未關閉的連線關閉  2. 擴大共享池 , 方法如下 :解決方法可以是修改連線池的連線生存期 , 因為預設值是 6

SQL之CASE WHEN用法(CASE WHEN使用總結)

簡單CASE WHEN函式: CASE SCORE WHEN 'A' THEN '優' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE

SQL Server中,觸發器

觸發器是一種特殊型別的儲存過程,它不同於之前的我們介紹的儲存過程。觸發器主要是通過事件進行觸發被自動呼叫執行的。而儲存過程可以通過儲存過程的名稱被呼叫。 Ø 什麼是觸發器     觸發器對錶進行插入、更新、刪除的時候會自動執行的特殊儲存過程。觸發器一般用在check約束更加複雜的約束上面。觸發器和普通的儲存

【轉】SQL Server 事務隔離級別

SQL 事務隔離級別 概述      隔離級別用於決定如果控制併發使用者如何讀寫資料的操作,同時對效能也有一定的影響作用。 步驟 事務隔離級別通過影響讀操作來間接地影響寫操作;可以在回話級別上設定事務隔離級別也可以在查詢(表級別)級別上設定事務隔離級別。事務隔離級別總共有6個隔離級別:READ UNC

SQL資料庫表連線圖文

總結:left join 以左表為準,查詢出左表的所有資料,右表中有對應的則顯示出來,沒有對應的則顯示為null.注:A left join B on  與  A,B where  有相同效果,如下:select student.* ,Score.* from student inner join Score