簡單SQL語句

來源:互聯網
上載者:User

標籤:多個   har   table   not   姓名   關鍵字   highlight   內串連   sql   

一、基礎

模式定義了資料如何儲存、儲存什麼樣的資料以及資料如何分解等資訊,資料庫和表都有模式。

主鍵的值不允許修改,也不允許複用(不能使用已經刪除的主索引值賦給新資料行的主鍵)。

SQL 陳述式不區分大小寫,但是資料庫表名、列名和值是否區分依賴於具體的 DBMS 以及配置。

SQL 支援以下三種注釋:

# 注釋SELECT *FROM mytable; -- 注釋/* 注釋1   注釋2 */

資料庫建立與使用:

CREATE DATABASE test;USE test;
二、建立表
CREATE TABLE mytable (  id INT NOT NULL AUTO_INCREMENT,  col1 INT NOT NULL DEFAULT 1,  col2 VARCHAR(45) NULL,  col3 DATE NULL,  PRIMARY KEY (`id`));
三、修改表

添加列

ALTER TABLE mytableADD col CHAR(20);

刪除列

ALTER TABLE mytableDROP COLUMN col;

刪除表

DROP TABLE mytable;
四、插入

普通插入

INSERT INTO mytable(col1, col2)VALUES(val1, val2);

插入檢索出來的資料

INSERT INTO mytable1(col1, col2)SELECT col1, col2FROM mytable2;

將一個表的內容插入到一個新表

CREATE TABLE newtable ASSELECT * FROM mytable;
五、更新
UPDATE mytableSET col = valWHERE id = 1;
六、刪除
DELETE FROM mytableWHERE id = 1;

TRUNCATE TABLE 可以清空表,也就是刪除所有行。

TRUNCATE TABLE mytable;

使用更新和刪除操作時一定要用 WHERE 子句,不然會把整張表的資料都破壞。可以先用 SELECT 語句進行測試,防止錯誤刪除。

七、查詢DISTINCT

相同值只會出現一次。它作用於所有列,也就是說所有列的值都相同才算相同。

SELECT DISTINCT col1, col2FROM mytable;
LIMIT

限制返回的行數。可以有兩個參數,第一個參數為起始行,從 0 開始;第二個參數為返回的總行數。

返回前 5 行:

SELECT *FROM mytableLIMIT 5;
SELECT *FROM mytableLIMIT 0, 5;

返回第 3 ~ 5 行:

SELECT *FROM mytableLIMIT 2, 3;
八、排序
  • ASC :升序(預設)
  • DESC :降序

可以按多個列進行排序,並且為每個列指定不同的排序方式:

SELECT *FROM mytableORDER BY col1 DESC, col2 ASC;
九、過濾

不進行過濾的資料非常大,導致通過網路傳輸了多餘的資料,從而浪費了網路頻寬。因此盡量使用 SQL 陳述式來過濾不必要的資料,而不是傳輸所有的資料到用戶端中然後由用戶端進行過濾。

SELECT *FROM mytableWHERE col IS NULL;
十、子查詢

子查詢中只能返回一個欄位的資料。

可以將子查詢的結果作為 WHRER 語句的過濾條件:

SELECT *FROM mytable1WHERE col1 IN (SELECT col2               FROM mytable2);

下面的語句可以檢索出客戶的訂單數量,子查詢語句會對第一個查詢檢索出的每個客戶執行一次:

SELECT cust_name, (SELECT COUNT(*)                   FROM Orders                   WHERE Orders.cust_id = Customers.cust_id)                   AS orders_numFROM CustomersORDER BY cust_name;
十一、串連

串連用於串連多個表,使用 JOIN 關鍵字,並且條件陳述式使用 ON 而不是 WHERE。

串連可以替換子查詢,並且比子查詢的效率一般會更快。

可以用 AS 給列名、計算欄位和表名取別名,給表名取別名是為了簡化 SQL 陳述式以及串連相同表。

內串連

內串連又稱等值串連,使用 INNER JOIN 關鍵字。

SELECT A.value, B.valueFROM tablea AS A INNER JOIN tableb AS BON A.key = B.key;

可以不明確使用 INNER JOIN,而使用普通查詢並在 WHERE 中將兩個表中要串連的列用等值方法串連起來。

SELECT A.value, B.valueFROM tablea AS A, tableb AS BWHERE A.key = B.key;

在沒有條件陳述式的情況下返回笛卡爾積。

自串連

自串連可以看成內串連的一種,只是串連的表是自身而已。

一張員工表,包含員工姓名和員工所屬部門,要找出與 Jim 處在同一部門的所有員工姓名。

子查詢版本

SELECT nameFROM employeeWHERE department = (      SELECT department      FROM employee      WHERE name = "Jim");

自串連版本

SELECT e1.nameFROM employee AS e1 INNER JOIN employee AS e2ON e1.department = e2.department      AND e2.name = "Jim";
自然串連

自然串連是把同名列通過等值測試連接起來的,同名列可以有多個。

內串連和自然串連的區別:內串連提供串連的列,而自然串連自動連接所有同名列。

SELECT A.value, B.valueFROM tablea AS A NATURAL JOIN tableb AS B;
外串連

外串連保留了沒有關聯的那些行。分為左外串連,右外串連以及全外串連,左外串連就是保留左表沒有關聯的行。

檢索所有顧客的訂單資訊,包括還沒有訂單資訊的顧客。

SELECT Customers.cust_id, Orders.order_numFROM Customers LEFT OUTER JOIN OrdersON Customers.cust_id = Orders.cust_id;

十二、組合查詢

使用 UNION 來組合兩個查詢,如果第一個查詢返回 M 行,第二個查詢返回 N 行,那麼組合查詢的結果一般為 M+N 行。

每個查詢必須包含相同的列、運算式和聚集合函式。

預設會去除相同行,如果需要保留相同行,使用 UNION ALL。

只能包含一個 ORDER BY 子句,並且必須位於語句的最後。

SELECT colFROM mytableWHERE col = 1UNIONSELECT colFROM mytableWHERE col =2;
 

簡單SQL語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.