MySQL 數據查詢

来源:https://www.cnblogs.com/strive99/archive/2018/12/28/10190853.html
-Advertisement-
Play Games

SELECT子句:用來指定查詢返回欄位,星號(*)表示返回所有欄位 SELECT [DISTINCT]*|欄位列表 #DISTINCT 用來過濾重覆數據 FROM子句:用來指定數據來源的表 FROM <表名> WHERE子句:用來定義查詢返回數據的條件 WHERE 查詢條件 GROUP BY子句:用 ...


  • SELECT子句:用來指定查詢返回欄位,星號(*)表示返回所有欄位

 SELECT  [DISTINCT]*|欄位列表        #DISTINCT 用來過濾重覆數據 

  • FROM子句:用來指定數據來源的表

FROM <表名> 

  • WHERE子句:用來定義查詢返回數據的條件

WHERE 查詢條件

  • GROUP BY子句:用來指定查詢結果的分組條件

GROUP BY 分組欄位 [HAVING 分組條件]

  • ORDER BY子句:用來給指定欄位排序,ASC(升序)可省略,DESC(降序)

ORDER BY 排序欄位 [ASC|DESC]         #ASC 為升序|DESC為降序

  • LIMIT子句:用來限制select語句返回的記錄數

LIMIT [初始位置],記錄數

舉例說明:

以student、course、score三張表示範, 三張表的創建語句如下

--
-- Database: stuInfo
--
CREATE DATABASE stuInfo
DEFAULT CHARACTER SET utf8;
USE stuInfo;

--
-- 表的結構 student        /*學生表*/
--
CREATE TABLE student (
sNo CHAR(10) NOT NULL COMMENT '學號',
sName VARCHAR(20) NOT NULL COMMENT '姓名',
sex CHAR(2) NOT NULL DEFAULT '' COMMENT '性別',
birthday DATE NOT NULL COMMENT '出生日期',
deptName VARCHAR(30) NOT NULL COMMENT '所屬班級',
remark VARCHAR(80) COMMENT '備註',
PRIMARY KEY (sNo),     /*設置sNo為主鍵*/
INDEX (sName)         /*設置sName為普通索引*/
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 轉存表中的數據 student
--
INSERT INTO student (sNo, sName, sex, birthday, deptName, remark) VALUES
('1308013101', '陳斌', '', '1993-03-20', '軟體131', ''),
('1308013102', '張潔', '', '1996-02-08', '軟體131', ''),
('1308013103', '鄭先超', '', '1994-04-25', '軟體131', ''),
('1308013104', '徐孝兵', '', '1994-08-06', '軟體131', ''),
('1308013105', '王群', '', '1995-03-27', '軟體131', ''),
('1309122501', '劉威', '', '1994-07-13', '網路131', ''),
('1309122502', '沈雁斌', '', '1994-05-28', '網路131', ''),
('1309122503', '楊群', '', '1995-10-18', '網路131', ''),
('1309122504', '蔣維維', '', '1994-10-19', '網路131', ''),
('1309122505', '楊璐', '', '1995-09-26', '網路131', ''),
('1312054901', '王林林', '', '1994-04-16', '機電131', ''),
('1312054902', '楊一超', '', '1994-08-27', '機電131', ''),
('1312054903', '張偉', '', '1995-01-03', '機電131', ''),
('1312054904', '田翠萍', '', '1994-10-20', '機電131', ''),
('1312054905', '周偉', '', '1995-09-10', '機電131', '');

--
-- 表的結構 course        /*課程表*/
--
CREATE TABLE course (
cNo CHAR(5) NOT NULL COMMENT '課程編號',
cName VARCHAR(30) NOT NULL COMMENT '課程名稱',
credit TINYINT UNSIGNED COMMENT '學分',
remark VARCHAR(100) COMMENT '備註',
PRIMARY KEY (cNo),     /*設置cNo為主鍵*/
UNIQUE (cName)         /*設置cName為唯一索引*/
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 轉存表中的數據 course
--
INSERT INTO course (cNo, cName, credit, remark) VALUES
('01001', 'C語言程式設計', 5, '電腦類專業課程'),
('01002', '數據結構', 4, '電腦類專業課程'),
('01003', 'Java程式設計', 4, '電腦類專業課程'),
('02001', '網路基礎', 3, '電腦類專業課程'),
('02002', '資料庫原理及應用', 4, '電腦類專業課程'),
('02003', '操作系統', 4, '電腦類專業課程'),
('09001', '機械設計基礎', 5, NULL),
('09002', '機械製造基礎', 4, NULL),
('09003', '機械製圖', 4, NULL);

--
-- 表的結構 score        /*成績表*/
--
CREATE TABLE score (
sNo CHAR(10) NOT NULL COMMENT '學號',
cNo CHAR(5) NOT NULL COMMENT '課程編號',
grade TINYINT UNSIGNED NOT NULL COMMENT '成績',
PRIMARY KEY(sNo, cNo),     /*設置sNo和cNo為複合主鍵*/
FOREIGN KEY(sNo) REFERENCES student(sNo)    /*與學生表關聯*/
ON UPDATE NO ACTION ON DELETE NO ACTION,
FOREIGN KEY(cNo) REFERENCES course(cNo)    /*與課程表關聯*/
ON UPDATE NO ACTION ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 轉存表中的數據 score
--
INSERT INTO score (sNo, cNo, grade) VALUES
('1308013101', '01001', 72),
('1308013101', '01002', 56),
('1308013101', '01003', 77),
('1308013102', '01001', 85),
('1308013102', '01002', 73),
('1308013102', '01003', 90),
('1308013103', '01001', 79),
('1308013104', '01001', 82),
('1308013105', '01001', 63),
('1309122501', '02001', 84),
('1309122501', '02002', 92),
('1309122501', '02003', 71),
('1312054901', '09001', 87),
('1312054901', '09002', 90),
('1312054901', '09003', 95);
三張表的創建

 查詢語句如下:

 -- 查詢學生表的所有欄位
SELECT * from student; 
-- 查詢學生表的學號,姓名,性別欄位
SELECT sNo,sName,sex from student;  
-- 查詢查詢學生表的學號,姓名,性別欄位,並用 as 定義欄位別名
SELECT sNo as '學號',sName as '姓名',sex as '性別' FROM student;  
-- 查詢學生表的所有女生信息
SELECT *from student WHERE sex='';
-- 查詢課程表中學分大於4的課程所有信息
SELECT *FROM course WHERE credit>4;
-- 查詢學生表中在1995年出生的學生信息
select *FROM student where birthday>='1995-1-1' AND birthday<='1995-12-31';
-- 查詢學生表中姓楊的信息
SELECT *FROM student where sName LIKE '楊%';
-- 查詢學生表中姓楊的姓名為兩個字的學生信息
SELECT *FROM student where sName LIKE '楊_';
-- 查詢學生表中姓楊的姓名為三個字的學生信息
SELECT *FROM student where sName LIKE '楊__';

-- 查詢學生表中姓名的第二個字為偉和先的同學信息
select *FROM student where sName LIKE '_偉%' OR sName LIKE '_先%';
-- 查詢學生表中在1995年出生的學生信息
SELECT *FROM student where birthday BETWEEN '1995-1-1' AND '1995-12-31';
-- 查詢成績表中成績在60到89之間的信息
SELECT *FROM score WHERE grade  BETWEEN 60 and 89;
-- 查詢學生表學號為 1308013101,1309122503,1312054904 的學生信息
SELECT *FROM student WHERE sNo in('1308013101','1309122503','1312054904');
-- 查詢課程表中標記為空的信息
SELECT *FROM course where remark is NULL;
-- 查詢學生表中男生的信息並按生日降序排序
SELECT *FROM student WHERE sex='' ORDER BY birthday DESC;
-- 查詢學生表所有信息並按性別降序,學號升序排列
SELECT *FROM student ORDER BY sex DESC,sNo;
-- 查詢學生表信息並按生日降序,取前五個記錄
SELECT *FROM student ORDER BY birthday DESC
LIMIT 5;
-- 查詢成績表中當課程號為01001的學號,課程號,成績信息,並以成績降序排列
SELECT sNo,cNo,grade FROM score WHERE cNo='01001' ORDER BY grade DESC 
LIMIT 1,3;
-- 查詢成績表中選修的學號 並用DISTINCT去重
SELECT DISTINCT sNo FROM score;
-- 用內連接 INNER JOIN 來查詢信息
SELECT student.sNo,sName,sex,cNo,grade FROM student inner JOIN score ON student.sNo=score.sNo
where sex='';

SELECT student.sNo,sName,sex,cNo,grade FROM student,score where student.sNo=score.sNo and sex='';
-- 查詢學號為1308013101 的信息
select S.sNo,sName,sex,C.cNo,cName,grade FROM student S INNER JOIN score G ON S.sNo=G.sNo
INNER JOIN course C on C.cNo=G.cNo
where S.sNo='1308013101';

SELECT S.sNo,sName,sex,C.cNo,cName,grade from student S ,course C,score G
where S.sNo=G.sNo and G.cNo=C.cNo and S.sNo='1308013101';
-- 查詢學號為1308013101的最高分,最低分及平均分和總分信息
SELECT max(grade) as '最高分',min(grade) as '最低分' ,avg(grade) as '平均分',sum(grade) as '總分' FROM score WHERE sNo='1308013101' ;
-- 查詢學生表男生人數
SELECT count(*) as '男生人數' from student where sex='';
-- 查詢成績表中已選修課程的人數並用DISTINCT去重
select count(DISTINCT sNo)as '已選修課程學生人數' from score;
-- 分組統計男、女生人數
SELECT sex as '性別',count(*) as '學生人數' from student GROUP BY sex;
-- 分組統計不同班級人數
SELECT deptName AS '班級',count(*) as '學生人數' from student GROUP BY deptName;
-- 5分組查詢學生的學號、姓名、選修課程數及平均分
SELECT student.sNo as '學號',sName as '姓名', count(*)as '選修課程數',avg(grade) as '平均分' from score INNER JOIN student on score.sNo=student.sNo
GROUP BY student.sNo;
-- 用嵌套查詢學號為1308013101的同學在同一個班級的學生信息
SELECT *FROM student where deptName=(SELECT deptName from student where sNo='1308013101');
-- 查詢課程編號為01001的課程,且成績超過該課程平均分的學生的學號、姓名、所屬班級、課程編號、課程名稱及成績
select student.sNo,sName,deptName,course.cNo,cName,grade FROM student,score,course 
where student.sNo=score.sNo and score.cNo=course.cNo 
AND course.cNo='01001'and grade>(SELECT avg(grade)FROM score,course 
where course.cNo=score.cNo and course.cNo='01001');
-- 創建新數據表,查詢網路131的學生記錄,將查詢結果插入到新數據表中
CREATE TABLE tempStudent(
    stuNo char(10) not null PRIMARY KEY,
    StuName VARCHAR(20)not NULL,
    sex char(1),
    deptName varchar(30) not null
);
INSERT into tempStudent(stuNo,stuName,sex,deptName)
  SELECT sNo,sName,sex,deptName from student where deptName='網路131';
-- 將數據結構 課程成績統一減去5
update score SET grade=grade-5
where cNo=(SELECT cNO from course WHERE cName='數據結構');
-- 查詢更新完的成績表
select *from score where cNo=(SELECT cNO from course WHERE cName='數據結構');

-- 刪除機電131的學生的成績記錄
delete from score
where sNo in (SELECT sNo from student where deptName='機電131');

-- 查詢 刪除後的機電131成績記錄
SELECT *from score where sNo in (SELECT sNo from student where deptName='機電131');

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 索引小知識 篇幅有限,索引的基本知識我們就不贅述了,在此,我們嘗試說明其中的一個小點 B+樹與B樹的區別到底是什麼。 InnoDB是使用B+樹來實現其索引功能的。在B+樹中,內節點(非葉子節點)存儲了行數據的鍵,而葉子節點存儲了所有的行數據,而B樹的每個節點都存儲了真實的數據。這種數據結構,決定了兩 ...
  • 在PostgreSQL官方文檔:https://www.postgresql.org/download/linux/redhat/ 有選項和說明 1、檢查有沒安裝:rpg -ga | grep postgresql 2、下載 從上述網址得到YUM地址,即在終端輸入:yum install https ...
  • rocksdb(https://rocksdb.org.cn/)是臉書(facebook)公司開源的一個key-value存儲引擎,基於leveldb開發。rocksdb使用的是LSM存儲引擎,純c++編寫。rocksdb具有很好的讀寫性能。但是rocksdb的實際操作需要很好的閱讀rocksdb ...
  • 非select命令 資料庫 1.創建 //create database 庫名 2.刪除 //drop database 庫名,... 2.重命名//exec sp_renamedb '庫名','新庫名' 表 1.創建 //create table 表名 (列名 類型,...) 2.刪除 //dro ...
  • --聲明變數,同時為變數賦值 declare @n int=10 print @n --單獨使用一條語句為變數複製 set @n=20 print @n select @n=30 print @n --通過set賦值與select複製的區別 select @n=COUNT(*) from Emplo... ...
  • 1、MongoDB介紹 1.1 什麼是MongoDB ? MongoDB 是由C++語言編寫的,是一個基於分散式文件存儲的開源資料庫系統。 在高負載的情況下,添加更多的節點,可以保證伺服器性能。 MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲為一個文 ...
  • 正文 生產環境中有一實例每天使用mysqldump備份時長達到了2個小時53分鐘,接近3個小時,還不算上備份文件歸檔的時間,這個時間對於邏輯備份來說有點久。為了提高邏輯備份效率,打算替換為使用mydumper。 對比mysqldump,mydumper具有如下特點: 1. 多線程備份 2. 備份執行 ...
  • 正常切換切換前: 主庫:SQL> select DATABASE_ROLE from v$database;DATABASE_ROLE PRIMARY SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS f ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...