SQL语句学习(二)
為一張表添加外鍵:
這里我們希望再建一張訂單的表為t_order,包含order_id,customer_id和price:
1 CREATE TABLE t_order(order_id INT(11) NOT NULL auto_increment PRIMARY KEY, 2 customer_id INT(11) NOT NULL, 3 price DECIMAL(10,2) 4 );我們按照之前所學的建立了這張表,但是實際上,我們希望這張表和之前的表應該是有某種約束,因此我們就需要為這行表添加一個外鍵。
和添加主鍵的語法類似的,我們添加外鍵:
1 ALTER TABLE t_order ADD FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id);或者,我們也可以在建立表的時候,直接設置外鍵:
CREATE TABLE t_order(order_id INT(11) NOT NULL auto_increment PRIMARY KEY, customer_id INT(11) NOT NULL, price DECIMAL(10,2), FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id) );注意:外鍵只是一個約束!
?
別名:
有時候名字太長,我們希望能用簡寫來代替之前的名字,這時候我們就可以設置別名(ALIAS),
我們可以為列設置別名:
1 SELECT First_name AS f_name, Last_name AS Family FROM t_customer;我們在輸出的結果中可以看到,列的名字已經發生了改變:
?
同樣,我們可以設置表的別名:
1 SELECT t_c.customer_id FROM t_customer AS t_c;乍一看,使用別名似乎更加費事了。但是,我們看下面的SQL語句:
1 SELECT t_order.order_id, t_order.price FROM t_order, t_customer WHERE t_customer.First_name = 'MeiMei';注意,我們雖然沒有直接從t_customer中查相關條件,但是FROM后面也要寫上t_customer,這是因為我們將這兩個做了笛卡爾積,然后在結果中再篩選。
我們再來看看更長的查詢:
1 SELECT t_order.order_id, t_order.price, t_customer.customer_id FROM t_order, t_customer WHERE t_customer.First_name = 'MeiMei';SQL語句里兩張表的名字出現了很多次,我們再看看使用別名后的SQL語句:
SELECT o.order_id, o.price, c.customer_id FROM t_order AS o, t_customer AS C WHERE c.First_name = 'MeiMei';是不是簡潔了一些。
?
實際上,當我們需要聯合查詢兩張表時,我們應該使用JOIN 將兩張表聯合起來。
1 SELECT * FROM t_order INNER JOIN t_customer ON t_customer.customer_id = t_order.customer_id;INNER JOIN 就相當于JOIN,是兩張表的交集,而OUTER JOIN還分為LEFT JOIN,RIGHT JOIN和FULL JOIN。LEFT JOIN左邊的集合,當后邊無該記錄時,用NULL填充,而RIGHT JOIN是右邊的集合,左邊沒有的記錄用NULL填充。FULL JOIN是求并集,沒有的記錄用NULL填充。
?
UNION和UNION ALL可以用來合并兩個查詢的結果:
1 SELECT Last_name FROM t_customer UNION SELECT customer_id FROM t_order;我們會得到一個以Last_name為列名的一個表,然后將前后兩次的篩選記錄都合并在內。這樣的篩選并沒有什么實際意義,只是用來練習語法。
當然我們可以篩選出多個列,但是前后兩次篩選的列數必須相同,并且結果中總以第一次查詢的列名表示。
UNION ALL會顯示重復的記錄,而UNOIN則不會。
?
轉載于:https://www.cnblogs.com/insaneXs/p/5220818.html
總結
以上是生活随笔為你收集整理的SQL语句学习(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RPi 2B GPIO 测试
- 下一篇: 多列布局方案整理