簡單的多表聯查sql
阿新 • • 發佈:2019-02-03
一、建立資料
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來實現*/
查詢結果: