SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL View(視圖)

視圖無非是存儲在數據庫中的相關名稱的SQL語句。視圖實際上是一個表中的預定義的SQL查詢形式的組合物。

視圖可以包含一個表中的所有行或從表中選擇部分行。視圖可以從一個或多個表取決於書面SQL查詢來創建。

視圖是一種虛擬表,讓用戶做到以下幾點:

  • 用戶或用戶類別的找到天然或直觀的結構數據的方式。

  • 限制訪問的數據,使得用戶可以看到,(有時)修改確實需要或不需要更多。

  • 彙總可從表中的數據生成各種報告。

創建視圖:

使用CREATE VIEW語句創建數據庫視圖。 視圖可以從一個單一的表,多個表或另一視圖中創建。

要創建視圖,用戶必須根據具體的實施有相應的系統權限。

CREATE VIEW基本的語法如下:

CREATE VIEW view_name AS
SELECT column1, column2..... FROM table_name
WHERE [condition];

可以包括在正常使用的SQL SELECT查詢類似的方式,在SELECT語句中的多個表。

例子:

考慮CUSTOMERS表具有以下記錄:

+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+

現在,下面的例子創建客戶表的視圖。這個視圖將用於從CUSTOMERS表讀取客戶姓名和年齡:

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS;

現在,你可以查詢CUSTOMERS_VIEW類似的方式來查詢實際的表。 下面是一個例子:

SQL > SELECT * FROM CUSTOMERS_VIEW;

這將產生以下結果:

+----------+-----+ | name | age | +----------+-----+ | Ramesh | 32 | | Khilan | 25 | | kaushik | 23 | | Chaitali | 25 | | Hardik | 27 | | Komal | 22 | | Muffy | 24 | +----------+-----+

WITH CHECK OPTION:

WITH CHECK OPTION是CREATE VIEW語句選項。WITH CHECK OPTION的目的是爲了確保所有更新和插入滿足視圖定義的條件。

如果它沒有滿足條件,在UPDATE或INSERT返回一個錯誤。

以下是創建CUSTOMERS_VIEW 視圖例子使用WITH CHECK OPTION:

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

在這種情況下,WITH CHECK OPTION拒絕任何NULL值條目在視圖的AGE列,因爲該視圖由數據定義的不能在AGE欄中有NULL值。

更新視圖:

視圖在一定條件下可以更新:

  • SELECT子句不包含關鍵字DISTINCT。

  • SELECT子句不包含彙總函數。

  • SELECT子句不包含集合函數。

  • SELECT子句不能包含集合運算符。

  • SELECT子句不能包含一個ORDER BY子句。

  • FROM子句中不能包含多個表。

  • WHERE子句不能包含子查詢。

  • 查詢不包含GROUP BY或HAVING。

  • 計算列無法更新。

  • 從基表中的所有NOT NULL列必須包含在視圖是爲了使用INSERT查詢功能。

所以,如果一個視圖滿足所有上述規則,那麼就可以更新視圖。下面是一個例子,更新Ramesh的年齡:

SQL > UPDATE CUSTOMERS_VIEW
SET AGE = 35 WHERE name='Ramesh';

這最終將更新基礎表CUSTOMERS,並同樣在視圖中反映。現在,試着查詢基礎表,SELECT語句將產生如下結果:

+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+

將行插入視圖:

數據行可以插入的視圖。適用於UPDATE命令規則同樣也適用於INSERT命令。

在這裏,我們也不能插入行到CUSTOMERS_VIEW,因爲我們還沒有包括在該視圖中的所有NOT NULL列, 否則,你可以插入數據行到視圖,以其插入一個表中類似的方式。

在視圖中刪除行:

可以從視圖中刪除數據行。適用於UPDATE和INSERT命令的規則同樣也適用於DELETE命令。

下面是一個例子刪除其 AGE= 22 的記錄

SQL > DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;

這將最終從基表CUSTOMERS刪除一行,並同樣在視圖本身也會有反映。現在,試着查詢基礎表,SELECT語句將產生如下結果:

+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 35 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+

刪除視圖:

很顯然,在這裏有一個視圖,需要一種方法來刪除這個視圖如果它不再需要。語法很簡單,如下所示:

DROP VIEW view_name;

下面是一個例子是刪除CUSTOMERS客戶表的視圖:

DROP VIEW CUSTOMERS_VIEW;