日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL查询语句基础构成

發(fā)布時(shí)間:2023/12/19 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL查询语句基础构成 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??? 本文是基本的SQL查詢語句用法,內(nèi)容主要來自Alan Learning SQL這本書第3章,包括select,from,where,group by,having,order by六個(gè)查詢子句,后續(xù)會(huì)深入介紹每個(gè)查詢子句的用法。

1. 查詢機(jī)制

在已經(jīng)創(chuàng)建數(shù)據(jù)庫連接的情況下,當(dāng)查詢被發(fā)送到服務(wù)器端時(shí),服務(wù)器在執(zhí)行查詢語句之前需要進(jìn)行檢查:

  • 用戶是否有權(quán)限執(zhí)行該語句?
  • 用戶是否有權(quán)限訪問目標(biāo)數(shù)據(jù)?
  • 語句的語法是否正確?
  • 通過3項(xiàng)檢查后,傳遞給查詢優(yōu)化器,從from語句開始執(zhí)行。

    2. 查詢語句

    一般來說,查詢語句包含以下6個(gè)子句中的2-3個(gè)

    3. select子句

    select子句用于結(jié)果集中需要顯示的列

    盡管select子句是查詢語句中第一個(gè)組成部分,但實(shí)際上在數(shù)據(jù)庫服務(wù)中,它是最后被評(píng)估的,因?yàn)樵诖_定結(jié)果集最后包含哪些列之前,必須先要知道結(jié)果集所有可能的列。

    select 語句除了能選擇表中的列,還可以包含其他內(nèi)容,包括:

  • 字符
  • 表達(dá)式,比如emp_id*3.14
  • 調(diào)用內(nèi)建函數(shù),比如UPPER(lname)
  • 用戶自定義函數(shù)
  • 也可以對(duì)查詢的列名設(shè)置別名,例如:

    mysql> SELECT emp_id,

    ???????????????? -> 'ACTIVE' status,

    ???????????????? -> emp_id * 3.14159 empid_x_pi,

    ???????????????? -> UPPER(lname) last_name_upper

    ????????? -> FROM employee;

    status, empid_x_pi等是列的別名,使得輸出結(jié)果更容易理解,有時(shí)為了清楚的表示別名,一般加掛檢測(cè)AS

    如:mysql> SELECT emp_id,

    ???????????????? -> 'ACTIVE' AS status,

    ???????????????? -> emp_id * 3.14159 AS empid_x_pi,

    ???????????????? -> UPPER(lname) AS last_name_upper

    ????????? -> FROM employee;

    4. from子句

    from子句 定義查詢中所使用的表,以及這些表的連接方式。

    4.1 表的概念

    其中表既包括永久表(create table產(chǎn)生的表),也包括臨時(shí)表(子查詢所返回的表),虛擬表(使用create view子句創(chuàng)建的試圖)

    比如子查詢產(chǎn)生的表

    SELECT e.emp_id, e.fname, e.lname

    FROM (SELECT emp_id, fname, lname, start_date, title

    ????????????? FROM employee) e;

    4.2 表的連接

    目前表中為ANSI標(biāo)準(zhǔn),引入了ON語句,舉例:

    SELECT e.emp_id, e.fname, e.lname, d.name dept_name? #d.name 使用別名dept_name

    FROM employee e INNER JOIN department d????????? ## 使用了表別名employee e

    ON e.dept_id = d.dept_id;

    表別名也可以使用AS關(guān)鍵詞,比如 FROM employee AS e INNER JOIN department AS d

    5. Where子句

    Where子句用于在結(jié)果集中過濾掉不需要的行。

    可以使用 AND,OR,NOT包含更多的條件

    SELECT emp_id, fname, lname, start_date, title

    FROM employee

    WHERE (title = 'Head Teller' AND start_date > '2006-01-01')

    ??????? OR (title = 'Teller' AND start_date > '2007-01-01');

    6. group by和having子句

    group by對(duì)查詢結(jié)果進(jìn)行分組,having對(duì)分組結(jié)果進(jìn)行過濾(類似于where子句,但此處不能用Where子句,二者的區(qū)別https://www.cnblogs.com/yzdqxing/p/4603508.html

    例如:

    SELECT d.name, count(e.emp_id) num_employees

    FROM department d INNER JOIN employee e

    ??? ON d.dept_id = e.dept_id

    GROUP BY d.name

    HAVING count(e.emp_id) > 2;

    7. order by子句

    order by子句對(duì)結(jié)果集中原始列或者計(jì)算表達(dá)式的結(jié)果進(jìn)行排序。

    例如:

    SELECT open_emp_id, product_cd

    FROM account

    ORDER BY open_emp_id, product_cd;

    默認(rèn)是排序?yàn)樯?#xff0c;如果需要降序,可以加上關(guān)鍵詞DESC

    SELECT account_id, product_cd, open_date, avail_balance

    FROM account

    ORDER BY avail_balance DESC;

    也可以對(duì)表達(dá)式進(jìn)行排序:

    SELECT cust_id, cust_type_cd, city, state, fed_id

    FROM customer

    ORDER BY RIGHT(fed_id, 3);

    還可以制定列的位置進(jìn)行排序,比如用第2列和第5列進(jìn)行排序:

    SELECT emp_id, title, start_date, fname, lname

    FROM employee

    ORDER BY 2, 5;

    總結(jié)

    以上是生活随笔為你收集整理的SQL查询语句基础构成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。