SQL Server【二】單表查詢

查詢

計算列

select * from emp;
-- *通配符,表示所有的字段
-- from emp 從emp表查詢select empno, ename from emp;
select ename as "員工姓名", sal*12 as "年薪" from emp;-- as可以省略,用于設置字段名
-- 注意用雙引號將字段名括起來,單引號雖然可以但是無法移植select 5 from emp;
-- 輸出一個字段,字段的長度是emp記錄的個數,每行只有一個元素5,無字段名select 5;
-- 輸出一個字段,長度為1,元素為5,無字段名,不推薦,Oracle不知此

在Oracle中字段的別名不允許單引號括起來,但是SQL Server允許。

dictinct

select distinct deptno from emp;
-- distinct 會過濾重復的數據
select distinct comm from emp;
-- distinct 可以過濾重復的null
select distinct comm, deptno from emp;
-- distinct 可以過濾組合
select deptno ,distinct comm from emp;
--error,邏輯上有沖突

between

select * from emp 
where sal >=1500 and sal <= 3000select * from emp
where sal between 1500 and 3000--between 字段元素在某個范圍內

in

屬于若干個孤立的值

select * from emp where sal in (1500, 3000, 5000);
--等價于
--in表示孤立的值
select * from emp
where sal=1500 or sal=3000 or sal=5000;select * from emp where sal not in (1500, 3000, 5000);
--等價于
select * from emp
where sal<>1500 and sal<>3000 and sal<>5000;
--不等于<> !=是等價的,推薦使用第一種

top

select top 2 * from emp;
select top 15 percent * from emp;
--如果不是整數,向上取整,例如2.1->3
--使用top可是實現分頁查詢,Oracle不支持top,應該使用rownum<x的方式
--把工資在1500~3000之間的員工工資最高的兩個人的信息輸出
select top 2 * from emp
where sal between 1500 and 3000
order by sal desc

如果沒有使用order by則默認對主鍵進行排序

null

沒有值,空值

--輸出獎金非空的員工的信息
select * from emp where comm <> null;
--error:null不能參與布爾判斷--可以使用is和not is
select * from emp where comm is null;
--0和null不一樣,null表示空值,0表示整型數字
--任何類型的數據都允許為null--輸出每個員工的姓名 年薪(包含了獎金) comm假設是一年的獎金select ename as '姓名' , sal * 12 + comm as '年薪' from emp;
--error:null值無法參與運算
--任何數字和null運算結果都是nullselect ename as '姓名', sal * 12 + isnull(comm, 0) as '年薪' from emp
--correct
--isnull(字段, 默認值)表示如果字段為空返回默認值

order by

以某個字段排序

select * from emp order by sal 
-- 默認是按照升序排序, asc可以省略
select * from emp order by deptno, sal, comm
--先按照第一個字段排序,再將相同的按照第二個字段排序select * from emp order by deptno, sal, comm desc
--每一個desc或者asc只對一個字段生效
--即為一個字段指定的排序標準不會對其他字段產生影響

NULL值是所有值中最小的
order by常常和top一起使用

模糊查詢

select 字段的集合 from 表名 where 某個字段的名字 like 匹配的條件

匹配的條件通常含有通配符

  • %任意0個或者多個字符,例如%A%表示包含字母A的字符串
select * from emp where ename like 'A%';
  • _任意的單個字符
  • [a-f]a到f之間的任意一個字符
  • [a,f]a或者f
  • [^a-f]不是a到f之間的字符
select * from emp where ename like '[^A-F]%'
  • 如果想要查找%或者_,需要使用轉義字符進行轉義,格式為
select * from emp where name like '%\%%' escape '\'

escape后面跟的字符表示轉義標志字符,也可以為其他的,一般習慣用反斜杠

聚合函數

函數分為單行函數和多行函數

  • 單行函數:每一行都進行操作,例如upper() lower()
  • 多行函數:對多個行進行操作,例如max()
select LOWER(ename) as '姓名'from emp;select MAX(sal) from emp;

聚合函數的分類
多行函數返回一個值,通常返回統計分組信息

  • max()
  • min()
  • avg()
  • count()
    count可以統計字段元素的個數,重復的也會統計,不包含Null值。如果不想統計重復的,可以使用distinct
select COUNT(deptno) from emp;			--返回14
select COUNT(distinct deptno) from emp;	-- 返回3
select MAX(sal) as '最高工資', MIN(sal) as '最低工資', COUNT(comm) as '獲得年終獎人數' from emp;

需要注意的是多行函數和單行函數不能混合使用。

group by

分組,只能查詢分組后的信息,后面只能是聚合函數或者是分組信息。通俗的講,只能查詢group by后面的和聚合函數。

select deptno, AVG(sal) as '部門平均工資'from empgroup by deptno
select deptno as '部門', job as '職位', AVG(sal) as '平均工資', COUNT(*) as '人數'from empgroup by deptno, joborder by deptno, job--可以根據多個信息分組,會首先根據第一個相等的分類,再根據第二個相等的。

having

對分組之后的信息進行過濾。同樣地,having后面也只能跟分組信息

--輸出部門平均工資大于2000的部門的部門編號 部門的平均工資
select deptno as '部門', AVG(sal) as '平均工資'from empgroup by deptnohaving AVG(sal) > 2000--輸出部門員工數大于3的部門編號和平均工資	
select deptno as '部門編號', AVG(sal) as '平均工資'from empgroup by deptnohaving COUNT(*) > 3

如果我們不使用group by只使用having,則會將每一個記錄都當作一個組進行過濾。

havingwhere的異同

  • 相同點:都是對數據過濾,保留有效的數據,不允許使用字段的別名
  • 不同點:where是對原始記錄過濾,having是對分組之后的記錄過濾。
  • 不同點:where不能和聚合函數搭配使用,having必須和聚合函數或者分組信息搭配使用,使用having之后select后面也只能是聚合函數或者分組信息
select COUNT(*)from emp where ename like '%A%'having AVG(sal) > 1500

如果我們使用as指定別名,別名只能用于輸出字段,不能在后面使用
語句的執行順序:

  • from從表中迭代取出一個個記錄
    • 使用where判斷是否符合條件,如果不符合條件就舍棄,如果符合條件則執行下面語句
    • 使用group by按照條件對該記錄進行分組,同時計算havingselect后面的分組信息

等待分組結束以后

  • having循環迭代每個分組是否符合條件
    • 如果符合條件則將select后面的分組信息輸出
    • 如果不符合條件則舍棄該分組

最后對分組用order by進行排序,此時的order by后面同樣只能夠跟分組信息

--將工資大于1500的員工按照部門編號分組,并輸出組中人數大于2的組的部門編號和平均工資
select deptno as '部門編號', AVG(sal) as '平均工資'from emp where sal > 1500group by deptnohaving COUNT(*) > 2

select參數的相對位置是固定的,不能變化的。相對位置如下:

-- 把姓名不包含A的所有員工按照部門編號分組
-- 統計輸出部門平均工資大于2000的部門的部門編號 部門平均工資 部門人數select deptno as '部門編號', AVG(sal) as '平均工資', COUNT(*) as '部門人數'from emp where ename not like '%A%'group by deptnohaving AVG(sal) > 2000order by deptno

select語句的基本結構

SELECT select_list[INTO new_table_name]FROM table_name[WHERE search_conditions][GROUP BY group_by_list][HAVING group_conditions][ORDER BY order_list[ASC|DESC]]--其中order_list如果使用了GROUP BY 或者HAVING就必須也是分組信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server【三】連接查詢

將兩個表或者兩個以上的表以一定的連接條件連接起來&#xff0c;從中檢索出滿足條件的數據。 內連接 使用inner join&#xff0c;inner可以省略 -- 查詢員工的姓名和部門名稱 select "E".ename as "員工姓名", "D".dname as "部門名稱&q…

Linux下網絡socket編程——實現服務器(select)與多個客戶端通信

一、關于socket通信 服務器端工作流程&#xff1a; 調用 socket() 函數創建套接字 用 bind() 函數將創建的套接字與服務端IP地址綁定調用listen()函數監聽socket() 函數創建的套接字&#xff0c;等待客戶端連接 當客戶端請求到來之后調用 accept()函數接受連接請求&#xff0c…

SQL Server【四】

identity 主鍵自動增長&#xff0c;用戶不需要為identity修飾的主鍵賦值 create table student (std_id int primary key identity(10,5),--(10,5)可以省略&#xff0c;默認為(1,1)std_name nvarchar(200) not null ) select * from student insert into student values (張三…

TCP服務器/客戶端實例(C/C )

1.1、Linux下的TCP服務器&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h>void error_handling(char *mess…

pip代理解決pip下載失敗問題

在用pip下載各種庫的時候發現速度實在是太慢了&#xff0c;還會有各種奇奇怪怪的問題&#xff0c;動不動就玄學失敗。 在網上找來找去找到知乎上一位大佬的回答&#xff1a;傳送門&#xff0c;用了豆瓣的代理。哇咔咔&#xff0c;媽媽再也不用擔心我下載失敗了。 代理&#x…

實現Linux select IO復用C/S服務器代碼

服務器端#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<sys/stat.h> #include<arpa/inet.h> #include <sys/select.h>#define MAXBUF 256 #define MAXLISTEN…

Bellman-Ford算法和SPFA算法

Belloman-Ford算法 算法介紹 Dijkstra可以解決單源無負邊最短路徑問題。但是當遇到含有負邊的單源最短路徑問題就需要使用Bellman-Ford算法來解決。Bellman-Ford算法還可以檢測出負環。 算法步驟 源點s,數組d[u]d[u]d[u]表示s到u的最短距離初始化&#xff1a;d[s]0d[s]0d[s…

C語言實現單鏈表操作

SLIST_H #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定義單鏈表中的結點信息 ElemType data; //結點的數據域 struct Node *next; //結點的指針…

計算機網絡【4】傳輸層

概述 傳輸層是只有主機才有的層次 傳輸層的功能&#xff1a; 傳輸層提供進程和進程之間的邏輯通信&#xff08;網絡層提供主機與主機之間的邏輯通信&#xff09;復用和分用傳輸層對收到的報文進行差錯檢測 傳輸層有兩個協議&#xff1a; 面向連接的傳輸層控制協議TCP&…

Plotly繪圖

在做Python數據分析實驗的時候發現使用Plotly庫繪圖比較漂亮&#xff0c;在網上找到了一個比較好的教程&#xff0c;這里記錄一下&#xff0c;方便以后查找。 傳送門

計算機網絡【0】概述

計算機網絡概念和功能 概念 是一個將分散的、具有獨立功能的計算機系統&#xff0c;通過通信設備與線路連接起來&#xff0c;由功能完善的軟件實現資源共享和信息傳遞的系統。 計算機網絡是互連的、自治&#xff08;無主從關系&#xff09;的計算機集合。 功能 數據通信&am…

計算機網絡【1】物理層

物理層解決如何在連接各種計算機的傳輸媒體上傳輸數據比特流&#xff0c;而不是指具體的傳輸媒體。 確定與傳輸媒體接口有關的特性 機械特性&#xff1a;定義物理連接的特性&#xff0c;如規格、接口形狀、引線數目、引腳數目、排列電氣特性&#xff1a;規定傳輸二進制位時的電…

計算機網路【2】數據鏈路層

結點&#xff1a;主機、路由器 鏈路&#xff1a;兩個節點的物理通道 數據鏈路&#xff1a;邏輯通道&#xff0c;把實現 控制數據傳輸協議的硬件和軟件加到鏈路上就構成數據鏈路 幀&#xff1a;鏈路層的協議數據單元&#xff0c;封裝網絡層數據報 數據鏈路層在物理層提供服務的…

計算機網絡【5】應用層

應用層對應用程序的通信提供服務 應用層協議定義&#xff1a; 應用層的功能&#xff1a; 文件傳輸、訪問和管理電子郵件虛擬終端查詢服務和遠程作業登錄 重要協議&#xff1a;FTP、SMTP、POP3、HTTP、DNS 網絡應用模型 客戶/服務器模型&#xff08;Client/Server&#x…

操作系統【八】文件管理

文件&#xff1a;一組有意義的信息/數據集合 文件的屬性&#xff1a; 文件名&#xff1a;由創建文件的用戶決定文件名&#xff0c;主要是為了方便用戶找到文件。同一個目錄下不允許有重名文件標識符&#xff1a;一個系統內的個文件標識符唯一&#xff0c;對用戶來說毫無可讀性…

數據庫原理及應用【六】數據庫設計

數據依賴 函數依賴FD&#xff1a;一個屬性或者一組屬性的值可以決定另一個屬性的值 多值依賴MVD&#xff1a;一個屬性或者一組屬性的值可以決定另一個屬性的值的集合。FD是MVD的特例 符號表示&#xff1a;Name->->Course&#xff0c;課程多值依賴于姓名 連接依賴&#x…

數據可視化【一】JavaScript學習

本博客是我學習Curran Kelleher老師數據可視化課程的筆記&#xff0c;感興趣的小伙伴可以點擊這里學習。 three cores of data visualization: analysisdesignconstruction 推薦書籍《visualization analysis & design》 使用https://vizhub.com/進行編程學習&#xff…

數據庫原理及應用【二】數據模型

層次模型 tree Record and fieldParent-Child relationship(PCR) 每個記錄類型只有一個父節點 無法表達多對多信息 采用虛記錄解決多對多 網狀數據模型 系&#xff1a;主記錄->屬記錄 主記錄和屬記錄都可以有好多個 關系模型 表&#xff1a;table/relation 擁有更高的…

數據可視化【二】HTML+CSS+SVG+D3

HTML、CSS和SVG學習實現代碼&#xff1a;https://vizhub.com/Edward-Elric233/89185eb96bc64a9d81777873a0ccd0b9 index.html <!DOCTYPE html> <html><head><title>Shapes with SVG and CSS</title><link rel"stylesheet" href&qu…

數據可視化【三】基本概念

Visualization is suitable when there is a need to augment human capabilities rather than replace people with computational decision-making methods. 當可以信賴的智能化的解決方案存在的時候&#xff0c;可視化是不必要的。 當不知道需要分析的問題是什么的時候&…