1. 程式人生 > >簡單的多表聯查sql

簡單的多表聯查sql

一、建立資料

MySQL資料庫預設建立的test資料庫下實踐

/*建立兩張表 users 和 products*/ 
use test;
CREATE TABLE `test`.`users`( `user_id` INT NOT NULL AUTO_INCREMENT, `username` VARCHAR(30), PRIMARY KEY (`user_id`) );
CREATE TABLE `test`.`products`( `P_id` INT NOT NULL AUTO_INCREMENT, `user_id` INT, `p_name` VARCHAR(40), PRIMARY KEY
(`P_id`) );
/**插入users表資料**/
INSERT INTO `test`.`users` ( `username`) VALUES ('user1');
INSERT INTO `test`.`users` ( `username`) VALUES ('user2');
INSERT INTO `test`.`users` ( `username`) VALUES ('user3');
INSERT INTO `test`.`users` ( `username`) VALUES ('user4');
INSERT INTO `test`.`users` ( `username`
) VALUES ('user5');
INSERT INTO `test`.`users` ( `username`) VALUES ('user6'); INSERT INTO `test`.`users` ( `username`) VALUES ('user7'); INSERT INTO `test`.`users` ( `username`) VALUES ('user8'); INSERT INTO `test`.`users` ( `username`) VALUES ('user9'); INSERT INTO `test`.`users` ( `username`) VALUES
('user10');
INSERT INTO `test`.`users` ( `username`) VALUES ('user11'); INSERT INTO `test`.`users` ( `username`) VALUES ('user12'); INSERT INTO `test`.`users` ( `username`) VALUES ('user13');
/*插入products表資料*/
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('1', 'p1'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('2', 'p2');
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('3', 'p3');
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('4', 'p4'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('5', 'p5'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('6', 'p6'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('7', 'p7'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('8', 'p8'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('9', 'p9'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('10', 'p10'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('11', 'p11'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('12', 'p12'); 
INSERT INTO `test`.`products` (`user_id`, `p_name`) VALUES ('13', 'p13'); 

二、查詢語句

1、查詢產品最多的五個使用者名稱,以及產品數目

/*查出每個產品對應的使用者名稱的記錄*/
SELECT p_id,username FROM users u , products p  WHERE u.`user_id` = p.user_id;
/*將查詢出來的結果建立一個檢視p_u_view,儲存到資料庫中*/
CREATE  VIEW  p_u_view AS   (SELECT username,p_id FROM users u , products p  WHERE u.`user_id` = p.user_id)
/*從檢視中查詢出產品最多的前三名使用者名稱以及產品數量*/
SELECT username,COUNT(username) pcount  FROM  p_u_view
GROUP BY username 
ORDER BY pcount DESC
LIMIT 0,3;
/*完整的sql語句*/
SELECT  username,COUNT(username) pcount  FROM  (SELECT username,p_id FROM users u , products p  WHERE u.`user_id` = p.user_id) name_count 
GROUP BY username 
ORDER BY pcount DESC
LIMIT 0,3;  
/*********DESC 遞減  ,ASC 遞增 *********/
/*Oracle中不支援limit語法,可以用top語法 或者使用Oracle的隱藏欄位rownum來實現*/

查詢結果:
查詢結果