1. 程式人生 > >MySQL基操(二)--簡單SQL--Limit Join Order

MySQL基操(二)--簡單SQL--Limit Join Order

Limit

查詢入職員工時間排名倒數第三的員工所有資訊
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

樣例表

emp_no birth_date first_name last_name gender hire_date
10005 1955-01-21 Kyoichi Maliniak M 1989-09-12

參考程式碼 

select * from `employees` 
    where `hire_date` = (
    select `hire_date` from `employees` 
    order by `hire_date` desc limit 2,1);

註釋

LIMIT m,n : 表示從第m+1條開始,取n條資料;

LIMIT n : 表示從第0條開始,取n條資料,是limit(0,n)的縮寫。

本題limit 2,1 表示從第(2+1)條資料開始,取一條資料,即入職員工時間排名倒數第三的員工。

======================================================

兩張表的對應關係

查詢各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號dept_no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));


CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

輸出描述:

emp_no salary from_date to_date dept_no
10002 72527 2001-08-02 9999-01-01 d001
10004 74057 2001-11-27 9999-01-01 d004
10005 94692 2001-09-09 9999-01-01 d003
10006 43311 2001-08-02 9999-01-01 d002
10010 94409 2001-11-23 9999-01-01 d006

參考語句

select s.*, d.`dept_no` from `salaries` s,`dept_manager` d
    where (s.to_date = '9999-01-01' and d.to_date = '9999-01-01' 
           and d.emp_no = s.emp_no)

註釋 

兩表主鍵之間,建立唯一對應

======================================================

內連線

查詢所有已經分配部門的員工的last_name和first_name
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));


CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

查詢已分配部門的員工,即查詢dept_no不為空的對應員工。此處所要查詢的資料在不同的表,因而用多表連線查詢。

看清題目,部門和員工是多對多關係,部門員工表+員工表,不需要為空判斷

內連線參考程式碼

select e.last_name,e.first_name,d.dept_no
    from `dept_emp` d inner join `employees` e
    on e.emp_no = d.emp_no

使用內連線:返回兩個表的交集

關於各種連線 請參考:

===================================================

左連線

查詢所有員工的last_name和first_name以及對應部門編號dept_no,

也包括展示沒有分配具體部門的員工
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));


CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

左外連線參考程式碼 

select e.last_name, e.first_name, d.dept_no 
    from `employees` e left join `dept_emp` d
    on e.emp_no = d.emp_no

LEFT JOIN  是  LEFT OUT JOIN 的簡寫

INNER JOIN 兩邊表同時有對應的資料,即任何一邊缺失資料就不顯示。
LEFT JOIN 會讀取左邊資料表的全部資料,即便右邊表無對應資料。
RIGHT JOIN 會讀取右邊資料表的全部資料,即便左邊表無對應資料。 

===================================================

排序Order

查詢所有員工入職時候的薪水情況,給出emp_no以及salary, 並按照emp_no進行逆序

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));


CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

參考程式碼

select e.emp_no, s.salary
    from `employees` e inner join `salaries` s
    on e.hire_date = s.from_date
    and e.emp_no = s.emp_no
    order by e.emp_no desc;

相關推薦

MySQL--簡單SQL--Limit Join Order

Limit 查詢入職員工時間排名倒數第三的員工所有資訊 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NO

Mysql筆記簡單增刪改查

這是我在學習Mysql之路上做的筆記,今天將它粘出來。這一篇主要是簡單增刪改查。有錯誤的歡迎大家指出。。。 #增刪改查 #建立部門表 CREATE TABLE IF NOT EXISTS tb_d

SQL】常用MySQL面試題

SQL索引 一、為什麼要建立索引呢(優點)? 建立索引可以大大提高系統的效能。 第一, 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 第二, 可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。 第三, 可以加速表和表之

mysql進階之細談索引、分頁與慢日誌

連表 組合索引 rar 偏移量 最小值 num glob 要求 for 索引 1、數據庫索引   數據庫索引是一種數據結構,可以以額外的寫入和存儲空間為代價來提高數據庫表上的數據檢索操作的速度,以維護索引數據結構。索引用於快速定位數據,而無需在每次訪問數據庫表時搜索數據

Asp.Net Core WebAPI入門整理簡單示例

序列 open exc tor pda template ssa net found 一、Core WebAPI中的序列化 使用的是Newtonsoft.Json,自定義全局配置處理: // This method gets called by the runtime.

MySql學習筆記

ati 保存 ron setting mysql的安裝 use t-sql語句 cnblogs 完全卸載mysql MySql的安裝配置與卸載: 安裝:(1)將MySql的綠色版免安裝包放到D盤,命令行進入mysql綠色版解壓縮後的bin目錄:cd D:\mysql-5.

筆記 C#sql語句

fun 觸發器 收縮數據庫 bak cti 修改 hang chan ssa SQL語句大全刪除數據庫 drop database databasename SQL語句大全備份 --- 創建備份數據的 device USE master EXEC sp_addumpd

MySQL與Oracle---日期對比MySQL

val replace nbsp rac oracl 日期 align mysql datetime MySQL與Oracle的日期函數對比(一) 一、SQL 短日期格式:yyyy-m-d SELECT REPLACE(CONVERT(varchar(10),getda

算法 簡單選擇排序

簡單選擇排序從左到右依次選取一個值作為默認最大值,依次與其它值比較,如果有值比該值大,那最大值指針改指向該值,一輪比較完成後,如果最大值指針沒有變化,則從下一個值繼續下一輪比較,如果指針有變動,則最新指針位置的數值與初始指針位置數值交換位置。代碼如下:lst1 = [ [1, 8, 9, 5, 6,

關於MYSQL字符集問題

查看 cti 總結 service jdbc連接 cli 如果 tar 準備 1.查看默認字符集(默認情況下,mysql的字符集是latin1(ISO_8859_1)   通常,查看系統的字符集和排序方式的設定可以通過下面的兩條命令: mysql> SHO

Python3簡單的輸入輸出及內置函數查看

多少 工作 log 一起學 朋友 有關 pri www 再見 工作之余和女朋友一起學Python3,代碼都是她敲的,有點辣眼睛,僅做參考。 1.題目:輸入“姓名”,輸出“你好,姓名” 有關安裝和打開Python shell的步驟,參考這裏:http://www.jb51.n

mysql 語句集

where stock sele ood 出口 rst bsp class clas SELECT *,count(*) as num FROM `wms_stock` GROUP BY sku_id,batch_sn HAVING count(*)>1 售後退

zabbix監控mysql以及報警

rmi png sel 目錄 affect str 報警郵件 uptime install Zabbix部署 監控數據庫 報警服務(二) 終接著zabbix(一)接著部署配置過一段時間後,觀察下監控圖效果出來了沒zabbix3.0 server已自帶mysql的模板了,只需

mysql基本操作

數據 post upd ins mysql基本 ble sel pda 沒有 1、向表msg中插入數據,先創建表,再插入數據 mysql> create table msg ( -> id int, -> title varchar(60),

設計模式學習筆記--簡單工廠模式和工廠模式

bsp bubuko rac oid nds gen body () pri 老生長談的兩個設計模式了,這裏把這兩個設計模式對比著來總結一下。 什麽是簡單工廠模式? 簡單工廠模式:根據傳入工廠類的參數動態決定要創建哪一個產品類的實例。 UML圖如下(以實現一個計算器為例):

spring-data-jpa快速入門——簡單查詢

ref spa data mail domain event cif open 寫實 一、方法名解析   1.引言     回顧HelloWorld項目中的dao接口 public interface GirlRepository extends JpaRepos

MySQL慢查詢 - pt-query-digest詳解慢查詢日誌 pt-query-digest 慢日誌分析

進行 www summary exec 存儲 response 狀態 rep ota 隨筆 - 66 文章 - 0 評論 - 19 MySQL慢查詢(二) - pt-query-digest詳解慢查詢日誌 一、簡介 pt-que

sqlalchemy簡單的連接示例

修改 條件查詢 mode mit creat utf-8 orm 除開 生成 # -*- coding: utf-8 -*- import sqlalchemy from sqlalchemy import create_engine from sqlalchem

JPA hibernate spring repository pgsql java 工程sql文件導入數據,測試數據

ber tracking evel 主鍵 出現 一個 OS resources pos 使用jpa保存查詢數據都很方便,除了在代碼中加入數據外,可以使用sql進行導入。目前我只會一種方法,把數據集中在一個sql文件中。 而且數據在導入中常常具有先後關系,需要用串行的方式導

mysql監控優化主從復制

如何 程序 延遲 負載均衡 state 帶來 客戶 備份 技術 復制解決的基本問題是讓一臺服務器的數據和其他服務器保持同步。一臺主服務器的數據可以同步到多臺從服務器上。並且從服務器也可以被配置為另外一臺服務器的主庫。主庫和從庫之間可以有多種不同的組合方式。