MySQL數據庫語句總結

?

增insert into --

刪 delete from ?--

改 update table名字 set --

查 select * from ?--?

?

一.SQL定義

SQL(Structure Query Language)結構化查詢語言:

?

(一)DDL(Data Definition Language):

數據定義語言,用來定義數據庫對象:庫、表、列等;

(二)DML(Data Manipulation Language):

數據操作語言,用來定義數據庫記錄(數據);

(三)DCL(Data Control Language):

數據控制語言,用來定義訪問權限和安全級別;

(四)DQL(Data Query Language):

數據查詢語言,用來查詢記錄(數據)。

?

在開發中DML語句和DQL語句是操作數據庫表的數據時頻繁用到的,

而DDL語句是對數據庫或表的操作,一般只需要在初始化的時候執行一次就可以了。DCL比較少用!

?

通俗的講:DML語句就是對表的增加、刪除、修改操作。

?DQL語句就是對表的查詢操作,那為什么要把查詢操作分開為一個大類別呢,

因為查詢有時會涉及到比較復雜的查詢如:查詢多個表之間有相關聯系的信息,

或查詢按照多個屬性排列后的信息表(例:先按班級排列,再按成績排列,再按學號排列來顯示結果)

?

?

二.語句的格式

?

數據庫對關鍵字的大小寫不敏感,表名會自動轉化為小寫

?

(一)DDL語句

?

1. 對數據庫的操作

?

(1)創建數據庫,如果這個數據已經存在,那么會報錯。

創建數據庫:CREATE DATABASE mydb1;

?

(2)刪除數據庫,如果這個數據庫不存在,也不會報錯。

刪除數據庫:DROP DATABASE ?mydb1;

?

(3)修改數據庫的編碼屬性:

?ALTER DATABASE mydb1 CHARACTER SET utf8

修改數據庫mydb1的編碼為utf8。注意,在MySQL中所有的UTF-8編碼都不能使用中間的“-”,

即UTF-8要書寫為UTF8。

?

(4)查看所有數據庫名稱:SHOW DATABASES; 

??切換數據庫:USE mydb1,切換到mydb1數據庫;

??

?

?2.對數據庫內表的操作

?

?在對操作前,要先理解數據庫里面的基本數據類型!

?

常用類型:

l?int:整型

l?double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值為999.99;

l?char:固定長度字符串類型;

l?varchar:可變長度字符串類型;

l?text:字符串類型;

l?blob:字節類型;

l?date:日期類型,格式為:yyyy-MM-dd;

l?time:時間類型,格式為:hh:mm:ss

?

(1)添加表操作

l?.創建表的格式:

CREATE TABLE?表名(

??列名 列類型,

??列名 列類型,

??......

);

?

2.例如:創建一個學生信息表有id name sex age

要求:id是數字用關鍵字 Integer

?id是主鍵(唯一) primary key

????id是自增長關鍵字 auto_increment

????name不能為空

???其他的根據實際情況定!

設計代碼如下:

create table student (

id integer primary key auto_increment ,

name varchar(3) not null ,

age integer(2),

sex varchar(1));

?

(2)刪除表

DROP TABLE student ;//刪除student 表和delete語句刪除一行內容不同;

?

(3)修改表(也有增刪改查)

1.修改之添加列:給student表添加classname列:

ALTER TABLE student ADD (classname varchar(10));

2.修改之刪除列:刪除student表的classname列:

ALTER TABLE student DROP classname;

3.修改之修改列類型:修改student 表的sex列類型為CHAR(2):

ALTER TABLE student MODIFY gender CHAR(2);

4.修改之修改列名:修改student?表的sex列名為gender:

ALTER TABLE student change ?sex??gender CHAR(2);

5.修改之修改表名稱:修改student?表名稱為studentinfo:

ALTER TABLE student RENAME TO student;

?

(4)查看表

1.查看當前數據庫中所有表名稱:SHOW TABLES; 

2.查看指定表student的創建語句:SHOW CREATE TABLE student;

3.查看表student結構:DESC student;

?

?

(二)DML語句

?

對表里面的數據進行增刪改操作。

?

1.添加數據

INSERT INTO?表名(列名1,列名2,?…) VALUES(值1,?值2)或

INSERT INTO?表名?VALUES(值1,值2,…)

?

2.刪除數據

DELETE FROM?表名?[WHERE?條件]?或

TRUNCATE TABLE?表名(效率更高)

?

3.修改數據

UPDATE?表名?SET?列名1=值1,?…?列名n=值n [WHERE?條件]

?

?

(三)DCL語句

用得不多不做解釋!

?

(四)DQL語句(重點理解)

DQL就是數據查詢語言,數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端。

?

詳細的語法:

?SELECT selection_list /*要查詢的列名稱*/

??FROM table_list /*要查詢的表名稱*/

??WHERE condition /*行條件*/

??GROUP BY grouping_columns /*對結果分組*/

??HAVING condition /*分組后的行條件*/

??ORDER BY sorting_columns /*對結果分組*/

??LIMIT offset_start, row_count /*結果限定*/

?

幾種簡單的查詢格式示例:

SELECT * FROM?stu;

SELECT sid, sname, age FROM stu;

SELECT * FROM stu??WHERE gender='female' AND ge<50;

?

?

?

后面的查詢是用于多表間的數據讀取(選讀):

?

多表查詢

多表查詢有如下幾種:

l?合并結果集;

l?連接查詢

內連接

外連接

2?左外連接

2?右外連接

2?全外連接(MySQL不支持)

自然連接

l?子查詢

?

1 合并結果集

作用:合并結果集就是把兩個select語句的查詢結果合并到一起!

合并結果集有兩種方式:

l?UNION:去除重復記錄,例如:SELECT * FROM t1 UNION SELECT * FROM t2;

l?UNION ALL:不去除重復記錄,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。

?

?

要求:被合并的兩個結果:列數、列類型必須相同。

2 連接查詢

連接查詢就是求出多個表的乘積,例如t1連接t2,那么查詢出的結果就是t1*t2。

?

?

連接查詢會產生笛卡爾積,假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以擴展到多個集合的情況。

那么多表查詢產生這樣的結果并不是我們想要的,那么怎么去除重復的,不想要的記錄呢,當然是通過條件過濾。通常要查詢的多個表之間都存在關聯關系,那么就通過關聯關系去除笛卡爾積。

你能想像到emp和dept表連接查詢的結果么?emp一共14行記錄,dept表一共4行記錄,那么連接后查詢出的結果是56行記錄。

也就你只是想在查詢emp表的同時,把每個員工的所在部門信息顯示出來,那么就需要使用主外鍵來去除無用信息了。

?

?

  使用主外鍵關系做為條件來去除無用信息

SELECT * FROM emp,dept WHERE emp.deptno=dept.deptno;

?

?

?

上面查詢結果會把兩張表的所有列都查詢出來,也許你不需要那么多列,這時就可以指定要查詢的列了。

SELECT emp.ename,emp.sal,emp.comm,dept.dname

FROM emp,dept

WHERE emp.deptno=dept.deptno;

?

?

?

還可以為表指定別名,然后在引用列時使用別名即可。

SELECT e.ename,e.sal,e.comm,d.dname

FROM emp AS e,dept AS d

WHERE e.deptno=d.deptno;

?

2.1 內連接

上面的連接語句就是內連接,但它不是SQL標準中的查詢方式,可以理解為方言!SQL標準的內連接為:

SELECT *

FROM emp e

INNER?JOIN dept d

ON?e.deptno=d.deptno;

?

內連接的特點:查詢結果必須滿足條件。例如我們向emp表中插入一條記錄:

?

  其中deptno為50,而在dept表中只有10、20、30、40部門,那么上面的查詢結果中就不會出現“張三”這條記錄,因為它不能滿足e.deptno=d.deptno這個條件。

?

2.2 外連接(左連接、右連接)

外連接的特點:查詢出的結果存在不滿足條件的可能。

左連接:

SELECT * FROM emp e

LEFT OUTER?JOIN dept d

ON e.deptno=d.deptno;

?

左連接是先查詢出左表(即以左表為主),然后查詢右表,右表中滿足條件的顯示出來,不滿足條件的顯示NULL。

這么說你可能不太明白,我們還是用上面的例子來說明。其中emp表中“張三”這條記錄中,部門編號為50,而dept表中不存在部門編號為50的記錄,所以“張三”這條記錄,不能滿足e.deptno=d.deptno這條件。但在左連接中,因為emp表是左表,所以左表中的記錄都會查詢出來,即“張三”這條記錄也會查出,但相應的右表部分顯示NULL。

?

?

2.3 右連接

右連接就是先把右表中所有記錄都查詢出來,然后左表滿足條件的顯示,不滿足顯示NULL。例如在dept表中的40部門并不存在員工,但在右連接中,如果dept表為右表,那么還是會查出40部門,但相應的員工信息為NULL。

SELECT * FROM emp e

RIGHT OUTER JOIN dept d

ON e.deptno=d.deptno;

?

?

?

?

連接查詢心得:

連接不限與兩張表,連接查詢也可以是三張、四張,甚至N張表的連接查詢。通常連接查詢不可能需要整個笛卡爾積,而只是需要其中一部分,那么這時就需要使用條件來去除不需要的記錄。這個條件大多數情況下都是使用主外鍵關系去除。

兩張表的連接查詢一定有一個主外鍵關系,三張表的連接查詢就一定有兩個主外鍵關系,所以在大家不是很熟悉連接查詢時,首先要學會去除無用笛卡爾積,那么就是用主外鍵關系作為條件來處理。如果兩張表的查詢,那么至少有一個主外鍵條件,三張表連接至少有兩個主外鍵條件。

?

3 自然連接

大家也都知道,連接查詢會產生無用笛卡爾積,我們通常使用主外鍵關系等式來去除它。而自然連接無需你去給出主外鍵等式,它會自動找到這一等式:

l?兩張連接的表中名稱和類型完成一致的列作為條件,例如emp和dept表都存在deptno列,并且類型一致,所以會被自然連接找到!

當然自然連接還有其他的查找條件的方式,但其他方式都可能存在問題!

SELECT * FROM emp NATURAL JOIN dept;

SELECT * FROM emp NATURAL LEFT JOIN dept;

SELECT * FROM emp NATURAL RIGHT JOIN dept;

?

4 子查詢

子查詢就是嵌套查詢,即SELECT中包含SELECT,如果一條語句中存在兩個,或兩個以上SELECT,那么就是子查詢語句了。

l?子查詢出現的位置:

where后,作為條件的一部分;

from后,作為被查詢的一條表;

l?當子查詢出現在where后作為條件時,還可以使用如下關鍵字:

any

all

l?子查詢結果集的形式:

單行單列(用于條件)

單行多列(用于條件)

多行單列(用于條件)

多行多列(用于表)

練習:

工資高于甘寧的員工。

分析:

查詢條件:工資>甘寧工資,其中甘寧工資需要一條子查詢。

?

第一步:查詢甘寧的工資

SELECT sal FROM emp WHERE ename='甘寧'

?

第二步:查詢高于甘寧工資的員工

SELECT * FROM emp WHERE sal > (${第一步})

?

結果:

SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='甘寧')

?

l?子查詢作為條件

l?子查詢形式為單行單列

?

工資高于30部門所有人的員工信息

分析:

查詢條件:工資高于30部門所有人工資,其中30部門所有人工資是子查詢。高于所有需要使用all關鍵字。

?

第一步:查詢30部門所有人工資

SELECT sal FROM emp WHERE deptno=30;

?

第二步:查詢高于30部門所有人工資的員工信息

SELECT * FROM emp WHERE sal > ALL (${第一步})

?

結果:

SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30)

?

l?子查詢作為條件

l?子查詢形式為多行單列(當子查詢結果集形式為多行單列時可以使用ALL或ANY關鍵字)

?

查詢工作和工資與殷天正完全相同的員工信息

分析:

查詢條件:工作和工資與殷天正完全相同,這是子查詢

?

第一步:查詢出殷天正的工作和工資

SELECT job,sal FROM emp WHERE ename='殷天正'

?

第二步:查詢出與殷天正工作和工資相同的人

SELECT * FROM emp WHERE (job,sal) IN (${第一步})

?

結果:

SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='殷天正')

?

l?子查詢作為條件

l?子查詢形式為單行多列

?

查詢員工編號為1006的員工名稱、員工工資、部門名稱、部門地址

分析:

查詢列:員工名稱、員工工資、部門名稱、部門地址

查詢表:emp和dept,分析得出,不需要外連接(外連接的特性:某一行(或某些行)記錄上會出現一半有值,一半為NULL值)

條件:員工編號為1006

?

第一步:去除多表,只查一張表,這里去除部門表,只查員工表

SELECT ename, sal FROM emp e WHERE empno=1006

?

第二步:讓第一步與dept做內連接查詢,添加主外鍵條件去除無用笛卡爾積

SELECT e.ename, e.sal, d.dname, d.loc?

FROM emp e, dept d

WHERE e.deptno=d.deptno AND empno=1006

?

第二步中的dept表表示所有行所有列的一張完整的表,這里可以把dept替換成所有行,但只有dname和loc列的表,這需要子查詢。

第三步:查詢dept表中dname和loc兩列,因為deptno會被作為條件,用來去除無用笛卡爾積,所以需要查詢它。

SELECT dname,loc,deptno?FROM dept;

?

第四步:替換第二步中的dept

SELECT e.ename, e.sal, d.dname, d.loc

FROM emp e, (SELECT dname,loc,deptno FROM dept) d

WHERE e.deptno=d.deptno AND e.empno=1006

?

?

?

?

?

三.完整性約束

?

  完整性約束是為了表的數據的正確性!如果數據不正確,那么一開始就不能添加到表中。

下面說一下它們的關鍵字:

指定主鍵約束:PRIMARY KEY?

自增:AUTO_INCREMENT

非空:NOT NULL

唯一:UNIQUE

轉載于:https://www.cnblogs.com/ming888/p/10433270.html

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

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

相關文章

高安全性同態加密算法_壞的同態性教程

高安全性同態加密算法I was going to write at length about the issues I see in neumorphism and why this trend should be avoided. I know any attempt to guide my most impressionable colleagues away from it, will end up being failing because this fad is going t…

前端容易忽略的 debugger 調試技巧

大家好&#xff0c;我是若川。我們日常開發碰到的很多問題&#xff0c;通過 debugger 都能快速定位問題&#xff0c;所以推薦這篇大家容易忽略的調試技巧。會定位問題&#xff0c;可以節省很多時間。也就是我經常說的工欲善其事&#xff0c;必先利其器。也是為什么我經常強調調…

Spring高級程序設計這本書怎么樣

關于Spring高級程序設計 評論讀后感&#xff1a;這本書需要有一定的spring基礎的人看讀后感&#xff1a;對于了解Spring 很有用&#xff0c;并且是一本不錯的參考書讀后感&#xff1a;這本書早就想買了&#xff0c;就是太貴了&#xff5e;&#xff5e;&#xff5e; 啦啦啦&…

java調用arcgis rest服務器_c#調用arcgis地圖rest服務示例詳解(arcgis地圖輸出)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using ESRI.ArcGIS.Client;using ESRI.ArcGIS.Client.Geometry;using ESRI.ArcGIS.Client.Tasks;using System.Net;using System.IO;namespace ArcGISDemo{//自定義的Featureclass Feature…

Semantic Element

Semantic Element 1.什么是語義化 根據內容的結構&#xff0c;選擇合適的標簽&#xff08;代碼語義化&#xff09;便于開發者閱讀。寫出更優雅的代碼的同時讓瀏覽器的爬蟲和機器很好地解析。 語義&#xff08;semantic&#xff09;  語義化標記&#xff0c;是指每種標記表示一…

玉伯:開源有帶給我什么

在2021年527螞蟻技術日上&#xff0c;螞蟻內源社區舉辦了內源專場&#xff0c;在專場上玉伯給大家分享了《開源有帶給我什么》&#xff0c;以下為演講的圖文整理。我的開源之路我從2009年到2018年&#xff0c;接近十年時間&#xff0c;一直在做開源的一些事情&#xff0c;在這個…

python并行運算庫_最佳并行繪圖Python庫簡介:“ HiPlot”

python并行運算庫HiPlot is Facebook’s Python library to support visualization of high-dimensional data table, released this January. It is particularly well known for its sophisticated interactive parallel plot.HiPlot是Facebook的Python庫&#xff0c;用于支持…

Asp.net 文件上傳的 FileUpload FileName 和 FileUpload PostedFile.FileName的細節問題

Asp.net 文件上傳的 FileUpload FileName 和 FileUpload PostedFile.FileName的細節問題 ASP.NET 文件上傳估計大家都用得很熟悉&#xff0c;常用控件 FileUpload 。 主要步驟&#xff1a; 1.判斷是否合法 2.獲得文件的路徑 &#xff08;包括目錄的完整路徑&#xff0c;同時可能…

java 友元_C++ 友元函數 | 菜鳥教程

對教程中的例子&#xff0c;稍加修改&#xff0c;添加了友元類的使用。#include using namespace std;class Box{double width;public:friend void printWidth(Box box);friend class BigBox;void setWidth(double wid);};class BigBox{public :void Print(int width, Box &…

剛學編程的程序員必備這5大編程網站,你知道幾個?

一個好的網站&#xff0c;就是程序員學編程的基地。 雖說新手程序員也許知道一些在線編程網站&#xff0c;但是質量上乘的編程網站又知道幾個呢? 下面就來給大家推薦5個質量上乘的編程網站&#xff1a; 0、Leetcode LeetCode是大名鼎鼎的在線刷題網站&#xff0c;通過該網站的…

【贈書福利】不扶好眼鏡,請別打開這本挑戰JS語言特性的書

文末贈福利大家好&#xff0c;我是若川。為感謝大家一直以來的支持和肯定&#xff0c;文末抽《JavaScript悟道》3本包郵送和若干紅包&#xff0c;詳細規則請看文末哦。"人們不停地給老化的語言“整容”&#xff0c;拼命地往其中注入各種新的特性來穩住其流行地位&#xff…

MySQL存儲過程之事務管理

MySQL存儲過程之事務管理 ACID:Atomic、Consistent、Isolated、Durable 存儲程序提供了一個絕佳的機制來定義、封裝和管理事務。 1&#xff0c;MySQL的事務支持 MySQL的事務支持不是綁定在MySQL服務器本身&#xff0c;而是與存儲引擎相關&#xff1a; Java代碼 MyISAM&#xff…

羅馬數字 java_【leetcode刷題】[簡單]13.羅馬數字轉整數(roman to integer)-java

羅馬數字轉整數 roman to integer題目羅馬數字包含以下七種字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。字符 數值I 1V 5X 10L 50C 100D 500M 1000例如&#xff0c; 羅馬數字 2 寫做 II &#xff0c;即為兩個并列的 1。12 寫做 XII &a…

我在工作中是如何使用Git的

大家好&#xff0c;我是若川。今天分享一篇關于git的好文章。我自己經常用命令行終端和git縮寫。具體可以看我以往的文章。使用 ohmyzsh 打造 windows、ubuntu、mac 系統高效終端命令行工具&#xff0c;用過都說好。點擊下方卡片關注我、加個星標學習源碼整體架構系列、年度總結…

克服浮躁_設計思維:您克服并贏得低迷的最終工具。

克服浮躁設計思維101 (Design thinking 101) Let’s begin by getting ourselves clear on the question: What is design thinking?讓我們首先弄清楚問題&#xff1a;設計思想是什么&#xff1f; Many people have an impression that design thinking has something to do …

mongodb數組字段prefix匹配返回

DOC: https://docs.mongodb.com/manu... collection&#xff08;test&#xff09;結構 {_id: Objectd("123456789"),category: [apple_1,apple_2,banana_1,banana_2] }Question: 對test表的所有數據做category過濾&#xff0c;返回category中以apple開頭的元素 表原數…

java參數化查詢_小博老師解析Java核心技術 ——JDBC參數化查詢(二)

[步驟閱讀四]SQL注入按照以上方式開發&#xff0c;確實已經完成了基本的用戶登錄業務需求&#xff0c;但是這么做的話可以會出現一個比較嚴重的問題&#xff0c;那就是容易被SQL注入。所謂SQL注入&#xff0c;就是在需要用戶填寫信息&#xff0c;并且這些信息會生成數據庫查詢字…

Lightbox 效果

網上其實到處都是。 遮罩層&#xff1a; .transparent {filter:alpha(opacity0); -moz-opacity: 0.0; opacity: 0.0; z-index: 90;background-color:#000;float:left;top:0;left:0;position:absolute;width:100%; }主要業務層&#xff1a;.rollover5 {display:none; position:a…

前端搶飯碗系列之Vue項目如何做單元測試

大家好&#xff0c;我是若川。今天分享一篇vue項目如何做單元測試的好文&#xff0c;文章比較長&#xff0c;建議先收藏&#xff0c;需要時用電腦看。點擊下方卡片關注我、加個星標學習源碼系列、年度總結、JS基礎系列關于單元測試&#xff0c;最常見的問題應該就是“前端單元測…

React Native組件開發指南

React Native的組件開發一直處在一個比較尷尬的處境。在官方未給予相關示例與腳手架的情況下&#xff0c;社區中依然誕生了許許多多的React Native組件。因為缺少示例與規范&#xff0c;很多組件庫僅含有一個index.js文件。這種基礎的目錄結構也導致了一些顯而易見的問題&#…