【SQL從一點一滴分析系列文章】爲實際開發中的點點滴滴的總結,從最最簡單的SQL 查詢 到 綜合分析查詢 在分析 SQL 時,也會同時分析 mybatis 、Hibernate 中的相關操做 點擊查看詳情sql
本節講述 基本的 select 查詢單表數據語句mybatis
有這樣的需求,要交來自多個表的數據組織到一塊兒,就像是一個結果集疊加到另外一個上頁面同樣,例若有兩個表spa
表一 用戶 t_user 表 .net
select user_name,user_age
from t_user
union all
select dep_user_name,dep_user_age
from t_dep
複製代碼
查詢結果以下 3d
select user_name,user_age
from t_user
union
select dep_user_name,dep_user_age
from t_dep
複製代碼
UNION 操做符用於合併兩個或多個 SELECT 語句的結果集 UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出全部的值日誌
Union:對兩個結果集進行並集操做,不包括重複行,同時進行默認規則的排序; Union All:對兩個結果集進行並集操做,包括重複行,不進行排序;code
例如這種狀況,要顯示用戶表中全部用戶的姓名,以及每一個員工的心情日誌,這些數據存儲在兩個獨立的表中cdn
select u.user_name,d.dep_user_flag
from t_user u,t_dep d
where u.user_id = d.dep_user_id
複製代碼
這兩個表中經過 用戶的 id 來關聯,用戶表中 user_id ,部門表中,dep_user_id 爲用戶在用戶表中對應的id.blog
須要查找兩個表中共同的行,可是有多個列能夠用來聯接這兩個表,以下排序
在 MySql 和 SQL Server 中,可以使用多個聯接條件,將 user 表 與 dep 表中聯接起來
select u.user_name as userName,d.dep_user_flag userFlag,d.dep_user_age as age
from t_user u,t_dep d
where
u.user_name = d.dep_user_name
and
u.user_age = d.dep_user_age
複製代碼
或者使用 join on 子句聯接
select u.user_name as userName,d.dep_user_flag userFlag,d.dep_user_age as age
from t_user u
join t_dep d
on (
u.user_name = d.dep_user_name
and
u.user_age = d.dep_user_age)
複製代碼
MySQL 和 SQL Server 中
select u.user_name as userName,u.user_age as age
from t_user u
where u.user_name not in (select dep_user_name from t_dep)
複製代碼
使用子名查出 dep 表中全部的 user_name,而後外層查詢則從 user 表中查找 子查詢結果中沒有的行
Oracle 中
select u.user_name from t_user u
minus
select d.dep_user_name from t_dep d
複製代碼
minus指令是運用在兩個 SQL 語句上。它先找出第一個 SQL 語句所產生的結果,而後看這些結果有沒有在第二個 SQL 語句的結果中。若是有的話,那這一筆資料就被去除,而不會在最後的結果中出現
DB2 和 PostgreSQL 中使用集合操做 except
select u.user_name from t_user u
except
select d.dep_user_name from t_dep d
複製代碼
例如 用戶信息表 user ,部門信息工做表 dep ,員工獎勵表 bonus 表,咱們須要返回全部的員工信息、他們工做部門的心情信息、以及所得到的獎勵,在這裏,並非每一個員工都有部門心情信息,也並非每一個員工有獎勵信息,可是咱們但願把全部的信息查詢出來,這時咱們能夠這樣來寫
在 MySQL 、DB二、 PostgreSQL 和SQL Server 中
select u.user_name,u.user_age,d.dep_user_flag,b.bonus_count
from t_user u
left join t_dep d on d.dep_user_id = u.user_id
left join t_bonus b on b.bonus_user_id = u.user_id
複製代碼
完結