MYSQL必知必會(huì)挑戰(zhàn)題答案

SQL

sql語句執(zhí)行順序

(8) SELECT 
(9)DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2)         ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <limit_number>
(1) FROM:對FROM子句中的左表<left_table>和右表<right_table>執(zhí)行笛卡兒積抒寂,產(chǎn)生虛擬表VT1;
(2) ON: 對虛擬表VT1進(jìn)行ON篩選履澳,只有那些符合<join_condition>的行才被插入虛擬表VT2;
(3) JOIN: 如果指定了OUTER JOIN(如LEFT OUTER JOIN椅贱、RIGHT OUTER JOIN),那么保留表中未匹配的行作為外部行添加到虛擬表VT2策严,產(chǎn)生虛擬表VT3。
如果FROM子句包含兩個(gè)以上的表饿敲,則對上一個(gè)連接生成的結(jié)果表VT3和下一個(gè)表重復(fù)執(zhí)行步驟1~步驟3妻导,直到處理完所有的表;
(4) WHERE: 對虛擬表VT3應(yīng)用WHERE過濾條件,只有符合<where_condition>的記錄才會(huì)被插入虛擬表VT4;
(5) GROUP By: 根據(jù)GROUP BY子句中的列,對VT4中的記錄進(jìn)行分組操作倔韭,產(chǎn)生VT5;
(6) CUBE|ROllUP: 對VT5進(jìn)行CUBE或ROLLUP操作术浪,產(chǎn)生表VT6; 
(7) HAVING: 對虛擬表VT6應(yīng)用HAVING過濾器,只有符合<having_condition>的記錄才會(huì)被插入到VT7;
(8) SELECT: 第二次執(zhí)行SELECT操作寿酌,選擇指定的列胰苏,插入到虛擬表VT8中;
(9) DISTINCT: 去除重復(fù),產(chǎn)生虛擬表VT9;
(10) ORDER BY: 將虛擬表VT9中的記錄按照<order_by_list>進(jìn)行排序操作醇疼,產(chǎn)生虛擬表VT10;
(11) LIMIT: 取出指定街行的記錄硕并,產(chǎn)生虛擬表VT11,并返回給查詢用戶
SELECT
   Persons.LastName,
   Persons.FirstName,
   Orders.OrderNo
FROM
   Persons,
   Orders
WHERE
   Persons.Id_P = Orders.Id_P

SELECT
    Persons.LastName,
    Persons.FirstName,
    Orders.OrderNo
FROM
    Persons
INNER JOIN Orders ON
    Persons.Id_P = Orders.Id_P
ORDER BY
    Persons.LastName
除了我們在上面的例子中使用的 INNER JOIN(內(nèi)連接)秧荆,我們還可以使用其他幾種連接倔毙。
下面列出了您可以使用的 JOIN 類型,以及它們之間的差異乙濒。

    JOIN: 如果表中有至少一個(gè)匹配陕赃,則返回行                                 
    INNER JOIN 與 JOIN 是相同的。
    LEFT JOIN: 即使右表中沒有匹配颁股,也從左表返回所有的行
    RIGHT JOIN: 即使左表中沒有匹配么库,也從右表返回所有的行
    FULL JOIN: 只要其中一個(gè)表中存在匹配,就返回行
UPDATE
    表名
set
    VALUES1 = 'xxx',
    VALUE2 = 'xxxxx';
insert
    into
    表名(value1, value2)
values ('xx', 'xx')

---從某個(gè)表中查詢數(shù)據(jù)豌蟋,插入另外的表中
insert
    into
    table1(value1, 2)
select
    VALUES1,
    VALUES2
FROM
    table2
--復(fù)制整個(gè)表
SELECT
    *
INTO
    OrdersBackup
FROM
    Orders;

CREATE TABLE OrdersBackup AS
SELECT
    *
FROM
    Orders;
--where較select先執(zhí)行廊散,要使用select中的別名,解決方法是將含有別名列的查詢放入內(nèi)嵌視圖梧疲,就可以在外層查詢中引用別名列允睹。內(nèi)嵌視圖的別名為 X
select
    *
from
    (
    select
        ID as i, goodsno as no_1
    from
        ALU_ss )x
where
    i = '1';
select
    prod_name,
    prod_desc
from
    products
where
    prod_desc LIKE '%toy%'
    and prod_desc LIKE '%carrots%';
select
    prod_name,
    prod_desc
from
    products
where
    prod_desc LIKE '%toy%carrots%';
select
    vend_id,
    vend_name as vname,
    vend_address as vaddress,
    vend_city as vcity
from
    vendors
order by
    vend_name;
select
    prod_id,
    prod_price,
    prod_price*0.9 as sale_price
from
    products;
--復(fù)制表數(shù)據(jù),已經(jīng)建好了表結(jié)構(gòu)幌氮,該語句只能復(fù)制表的結(jié)構(gòu)缭受。該語句不會(huì)創(chuàng)建和復(fù)制源相同的主鍵、索引该互、約束和觸發(fā)器米者。    
INSERT
    into
    newtable
select
    name,sex ---COLUMN
FROM
    sourcetable;
--復(fù)制表和表結(jié)構(gòu)。該語句不會(huì)創(chuàng)建和復(fù)制源相同的主鍵宇智、索引蔓搞、約束和觸發(fā)器。
insert
    into
    newtables
from
    sourcetables
where
    whereexpression随橘;
select
    cust_id,
    customer_name,
    CONCAT(UPPER(LEFT(cust_contact, 2)), LEFT(cust_city, 3)))as user_login
from
    customers;
select
    order_num,
    order_data
from
    orders
where
    year(order_data)= 2020
    and month(order_data) = 1;
select
    SUM(quantity)
from
    orderitems;
select
    SUM(quantity)
from
    orderitems
where
    prod_item = 'BR01';
select
    MAX(prod_price) as max_price
from
    products
where
    prod_price < = 10;
select
    order_num,
    COUNT(*) as order_lines
from
    orderitems
group by
    order_num
order by
    order_lines;
select
    prod_id,
    MIN(prod_price) as cheapest_item
from
    products
group by
    prod_id
order by
    cheapest_item ;
SELECT
    order_num
FROM
    OrderItems
GROUP BY
    order_num
HAVING
    SUM(quantity) >= 100
ORDER BY
    order_num;
SELECT
    order_num
FROM
    OrderItems
GROUP BY
    order_num    --group by 后只能放實(shí)際的列喂分,而不是用于執(zhí)行匯總計(jì)算的列。
HAVING
    SUM(item_price * quantity) >= 1000
ORDER BY
    order_num;
select
    cust_id
from
    orders
where
    order_num IN (
    select
        order_num
    from
        orderitems
    where
        item_price > = 10)
select
    cust_id,
    cust_date
from
    orders
where
    order_num in (
    select
        ORDER_num
    from
        orderitem
    where
        prod_id = 'BR01')
order by
cust_date;
select
    cust_email
from
    customers
where
    cust_id in (
    select
        cust_id,
    from
        orders
    where
        order_num in (
        select
            ORDER_num
        from
            orderitem
        where
            prod_id = 'BR01') );
----訂單表机蔗、顧客表蒲祈、項(xiàng)目表   in = exists
select
    cust_id,
    (
    select
        SUM(item_price*quantity)
    from
        orderitems
    where
        orderitems.order_num = orders.orders_num) as total_ordered
from
    orders
order by
    total_ordered desc;

select
    cust_id,
    SUM(i.item_price*i.quantity) as total_ordered
from
    orders o
join orderitems i on
    i.order_num = o.orders_num
order by
    total_ordered desc;
select
    prod_name,
    (
    select
        SUM(quantity)
    from
        orderitems
    where
        products.prod_id = orderitems.prod_id) as quant_sold
from
    products;
select
    cust_name,
    orders_num
from
    customers c
join orders o on
    o.cust_id = c.cust_id
order by
    cust_name,
    orders_num
SELECT
    cust_name,
    order_num,
    (
    SELECT
        Sum(item_price*quantity)
    FROM
        OrderItems
    WHERE
        Orders.order_num = OrderItems.order_num) AS OrderTotal
FROM
    Customers,
    Orders
WHERE
    Customers.cust_id = Orders.cust_id
ORDER BY
    cust_name,
    order_num;
select
    cust_name,
    orders_num,
    SUM(item_prices*quantity) as orderTotal
from
    orders o
join customers c on
    o.cust_id = c.cust_id
join orderitem i on
    o.order_num = i.order_num
order by
    cust_name,
    orders_num
SELECT
    cust_email
FROM
    Customers
INNER JOIN Orders ON
    Customers.cust_id = Orders.cust_id
INNER JOIN OrderItems ON
    Orders.order_num = OrderItems.order_num
WHERE
    prod_id = 'BR01';
select  --6
    cust_name,
    SUM(item_prices*quanirty) as total_price
from    --1
    orders
join orderitems on
    orderitems.order_num = orders.order_num
join customers on---3
    orders.cust_id = customers.cust_id  --2
GROUP BY  --4 
    cust_name
HAVING  --5
    SUM(item_prices*quanirty) >=1000
order BY  --7
    cust_name
select
    cust_name,
    order_num
from
    customers
join orders on
    orders.cust_id = custmers.cust_id;
select
    cust_name,
    order_num
from
    customers
left outer join orders on
    orders.cust_id = custmers.cust_id;
select
    prod_name,
    order_num
from
    products
left outer join orderitems on
    orderitems.prod_id = products.prod_id
order by
    prod_name
select
    vendors.vend_id,
    COUNT(prod_id)
from
    vendors
left outer join products on
    products.vend_id = vendors.vend_id
group by
    vendors.vend_id;

select
    prod_id,
    quantity
from
    orderitems
where
    quantity = 1000
union
select
    prod_id,
    quantity
from
    orderitems
where
    proid_id like 'BNBG%'
order by
    prod_id
select
    prod_id,
    quantity
from
    orderitems
where
    quantity = 1000
    or proid_id like 'BNBG%'
order by
    prod_id;
INSERT
    into
    customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_email)
values(1000000042, 'Ben''s Toys', '123 Main Street', 'Oak Park', 'MI', '48237', 'USA', 'ben@forta.com');
update
    vendors
set
    UPPER(vend_state)
where
    vend_country = 'USA'
UPDATE
    customers
set
    cust_state = UPPER(cust_state)
where
    cust_country = 'USA'
alter TABLE vendors add vend_web char(100) 

create view customerswithorders as
select
    Customers.cust_id,
    Customers.cust_name,
    Customers.cust_address,
    Customers.cust_city,
    Customers.cust_state,
    Customers.cust_zip,
    Customers.cust_country,
    Customers.cust_contact,
    Customers.cust_email
from
    customers
join orders on
    orders.cust_id = custers.id;
--同時(shí)使用內(nèi)置函數(shù) NEWID 和 TOP甘萧、ORDER BY 來返回一個(gè)隨機(jī)結(jié)果集。
select
    TOP 5 *
from
    zd_MAData_erp
order by
    newid();

--MY SQL把內(nèi)置函數(shù) RAND 和 LIMIT梆掸、ORDER BY 結(jié)合使用    來返回一個(gè)隨機(jī)結(jié)果集扬卷。


select
    ename,
    job
from
    zd_MAData_erp
order by
    rand()
limit 5
select id,
    case
        when MAName is not null then MAName
        else '空'
    end
from
    zd_MAData_erp;


select
    mc,
    coalesce(cfdd, '空')
from
    ERP_BXG_YCL_Inventoryclass;
select
    ename,
    sal,
    case
        when sal <= 2000 then 'UNDERPAID'
        when sal >= 4000 then 'OVERPAID'
        else 'OK'
    end as status
from
    emp
select
    bm ,
    mc ,
    gys
from
    ERP_BXG_YCL_Inventoryclass
order by
    2;
select
    bm ,
    mc ,
    gys
from
    ERP_BXG_YCL_Inventoryclass
order by
    SUBSTRING(mc,LEN(mc)-2,2) 

select
    CONCAT(bm , mc ) as data1
from
    ERP_BXG_YCL_Inventoryclass;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酸钦,隨后出現(xiàn)的幾起案子怪得,更是在濱河造成了極大的恐慌,老刑警劉巖钝鸽,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汇恤,死亡現(xiàn)場離奇詭異,居然都是意外死亡拔恰,警方通過查閱死者的電腦和手機(jī)因谎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颜懊,“玉大人财岔,你說我怎么就攤上這事『拥” “怎么了匠璧?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咸这。 經(jīng)常有香客問我夷恍,道長,這世上最難降的妖魔是什么媳维? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任酿雪,我火速辦了婚禮,結(jié)果婚禮上侄刽,老公的妹妹穿的比我還像新娘指黎。我一直安慰自己,他們只是感情好州丹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布醋安。 她就那樣靜靜地躺著,像睡著了一般墓毒。 火紅的嫁衣襯著肌膚如雪吓揪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天所计,我揣著相機(jī)與錄音磺芭,去河邊找鬼。 笑死醉箕,一個(gè)胖子當(dāng)著我的面吹牛钾腺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讥裤,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼放棒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了己英?” 一聲冷哼從身側(cè)響起间螟,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎损肛,沒想到半個(gè)月后厢破,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡治拿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年摩泪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫谅。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡见坑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捏检,到底是詐尸還是另有隱情荞驴,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布贯城,位于F島的核電站熊楼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏能犯。R本人自食惡果不足惜鲫骗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悲雳。 院中可真熱鬧挎峦,春花似錦、人聲如沸合瓢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晴楔。三九已至顿苇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間税弃,已是汗流浹背纪岁。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留则果,地道東北人幔翰。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓漩氨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遗增。 傳聞我的和親對象是個(gè)殘疾皇子叫惊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容