天天看點

MySql連接配接查詢(内連接配接)

連接配接查詢

環境準備

-- 建立部門表
CREATE TABLE dept (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(20)
);

INSERT INTO dept (NAME) VALUES ('開發部'),('市場部'),('财務部');

-- 建立員工表
CREATE TABLE emp (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(10),
  gender CHAR(1),   -- 性别
  salary DOUBLE,   -- 工資
  join_date DATE,  -- 入職日期
  dept_id INT
);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孫悟空','男',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('豬八戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);


           

知識點-交叉查詢【了解】

1.目标

  • 了解交叉查詢

2.分析

交叉查詢把若幹張表(>=2)沒有條件的連接配接在一起,進行展示
           

3.講解

  1. 文法

2.練習: 使用交叉查詢部門和員工

-- 練習: 使用交叉查詢部門和員工的所有資訊
select * from emp,dept;
select * from dept,emp;
select emp.*,dept.* from emp,dept;

-- 練習: 使用交叉查詢部門的名稱和員工id,名稱,salary,join_date資訊
select dept.name,emp.id,emp.name,emp.salary,emp.join_date from emp,dept;
-- 取别名
select d.name,e.id,e.name,e.salary,e.join_date from emp e,dept d;
           
MySql連接配接查詢(内連接配接)

以上資料其實是左表的每條資料和右表的每條資料組合。左表有3條,右表有5條,最終組合後3*5=15條資料。

左表的每條資料和右表的每條資料組合,這種效果稱為笛卡爾積

-内連接配接查詢【重點】

1.目标

  • 掌握内連接配接查詢

2.分析

交叉查詢産生這樣的結果并不是我們想要的,那麼怎麼去除錯誤的,不想要的記錄呢,當然是通過條件過濾。通常要查詢的多個表之間都存在關聯關系,那麼就通過==關聯關系(主外鍵關系)==去除笛卡爾積。
           

3.講解

3.1 隐式内連接配接

隐式裡面是沒有inner關鍵字的

練習:查詢員工的id,姓名,性别,薪資,加入日期,所屬部門

結果

MySql連接配接查詢(内連接配接)

顯示内連接配接

顯示裡面是有inner關鍵字的

select ... from a [inner] join b on 連接配接條件 [ where 其它條件]
select * from emp inner join dept on emp.dept_id = dept.id

           
MySql連接配接查詢(内連接配接)

練習

查詢所有部門下的員工資訊,如果該部門下沒有員工則不展示.

-- 隐式内連接配接查詢
select * from emp e,dept d where e.dept_id = d.id;
-- 顯示内連接配接查詢
select * from emp e inner join dept d on e.dept_id = d.id;
           
MySql連接配接查詢(内連接配接)

小結

  1. 内連接配接的特點(查的是什麼東西)

    内連接配接查詢的是公共部分,滿足連接配接條件(主外鍵關系)的部分

  2. 使用内連接配接的關鍵點
    • 從表外鍵的值等于主表主鍵的值,過濾無用資料
    • 顯示内連接配接裡面的,on隻能用主外鍵關聯作為條件,如果還有其它條件,後面加where
  3. 文法
-- 隐式(不出現inner)
select * from a,b where a.主鍵=b.外鍵 [and 其它條件]

-- 顯示(出現inner)
select * from a [inner] join b on a.主鍵=b.外鍵 [where 其它條件]