目錄
SQl---DDL? 結構定義
創建、刪除 數據庫
代碼
?運行
設計表
數據類型
整數
浮點數
主鍵
約束
主鍵自增長
默認值
字段注釋
創建、刪除 表
代碼
運行
代碼
代碼
運行?
SQL---DML? 數據操縱
插入數據
代碼?
運行?
代碼?
運行?
代碼?
運行?
代碼?
運行
修改數據
代碼?
運行?
刪除數據
代碼??
運行
SQL---DQL? 數據查詢
基礎查詢
特定列查詢,全部列查詢
代碼??
運行
代碼??
運行?
算數運算符?+ - * /
代碼??
運行?
排除重復行
代碼??
運行?
條件查詢
代碼??
運行?
模糊查詢
like
代碼??
運行?
between and?
代碼??
運行?
in
代碼??
運行?
is null /is not null
代碼??
運行?
union?
代碼??
運行?
union all
代碼??
運行?
排序
代碼??
運行?
數量限制
代碼??
運行?
分組查詢
代碼??
運行
代碼??
運行
代碼??
運行?
函數? 查詢結果處理
單行函數?
字符函數
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行
代碼?
運行?
邏輯處理
代碼??
運行
代碼??
運行
代碼??
運行?
數學函數
代碼??
運行
代碼??
運行
代碼??
運行?
日期函數?
代碼??
運行
代碼??
運行
?編輯
代碼??
運行
代碼??
運行
?編輯
代碼? ?
運行?
分組函數
代碼??
運行
SQl---DDL? 結構定義
創建、刪除 數據庫
代碼
-- 創建數據庫
CREATE DATABASE IF NOT EXISTS schooldb CHARSET utf8
-- 刪除數據庫
DROP DATABASE IF EXISTS schooldb
?運行
-- mysql中數據庫一旦創建,名字不能修改
-- 修改數據庫字符集
ALTER DATABASE schooldb CHARSET utf8
設計表
數據類型
char(n)??可變長度的字符串 ?n是最大長度 ?如果只存儲2個字符,實際占有2個空間位置
varchar(n)? 可變長度的字符串 ?n是最大長度 ?如果只存儲2個字符,實際占有2個空間位置
data? 日期,包含年,月,日
datetime? 年月日,時分秒
整數
signed??有符號,默認為無符號
unsigned? 無符號?
浮點數
decimal(M,D)
M:精度,數據的總長度;
D:標度,小數點后的長度。
主鍵
在一張表中代表唯一的一條記錄,不能為空且不能重復
約束
主鍵約束? PRIMARY KEY
不能為空約束? NOT NULL
唯一性約束 UNIQUE
主鍵自增長
主鍵自增長,設置主鍵自增長后,只能為整數類型
AUTO_INCREMENT
默認值
DEFAULT default_value
字段注釋
comment'注釋'
創建、刪除 表
-- 創建表
-- 確定表名 ?學生信息表
-- 確定表中字段(列) 學號,姓名,性別,生日,電話,身高,注冊時間
-- 確定字段(列)的數據類型 ? 以及長度
-- 確定列的約束
-- 創建表語法
代碼
CREATE TABLE student(number INT,NAME VARCHAR(6),gender CHAR(1),birthday DATE,phone VARCHAR(11),height DECIMAL(3,2),reg_time DATETIME)
運行
?
?-- 刪除表結構,刪除后表中數據就不存在了
代碼
DROP TABLE student
-- 創建表 ?并添加約束規則
-- PRIMARY KEY 設置主鍵約束 ,添加主鍵約束后,值不能重復,一個表中只能有一個列是主鍵
? ?-- 主鍵列可以唯一
? ?-- mysql中主鍵可以設置為自動增長 ?AUTO_INCREMENT
-- NOT NULL 不能為空約束
-- UNIQUE 唯一性約束
-- 檢查約束 設置條件
代碼
CREATE TABLE student(number INT PRIMARY KEY AUTO_INCREMENT COMMENT '學號主鍵',NAME VARCHAR(6) NOT NULL COMMENT '姓名',gender CHAR(1) NOT NULL COMMENT '性別',birthday DATE NOT NULL,phone VARCHAR(11) NOT NULL UNIQUE,height DECIMAL(3,2) CHECK(height<3),reg_time DATETIME
)
運行?
SQL---DML? 數據操縱
常用語句:insert into,update,delete
插入數據
方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);
代碼?
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('杜蘭特','男','2019-6-8','12345678913',1.98,NOW())
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('科比','男','2019-6-8','12345678912',1.98,NOW())
運行?
方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;
代碼?
INSERT INTO student SET NAME='詹姆斯',gender='男',birthday='1986-2-3',phone='12345678911'
運行?
方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);
代碼?
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('科比','男','1988-6-8','12345678914',1.88,NOW()),('庫里','男','1987-6-8','12345678915',2.12,NOW())
運行?
方式4:INSERT INTO 表名(列1,列2……,列n) 查詢語句(查詢的列數與插入列數匹配。
代碼?
-- 復制表結構
CREATE TABLE stu LIKE student
INSERT INTO stu(number,NAME,gender,birthday,phone,height,reg_time)SELECT * FROM student
運行
?
修改數據
-- 修改記錄 ?修改時一定注意條件
UPDATE 表名 SET 列名 = ‘新值’WHERE 條件
代碼?
UPDATE stu SET NAME='c羅',height=1.70 WHERE number = 1
運行?
刪除數據
DELETE FROM 表名 WHERE 條件
TRUNCATE TABLE 表名;清空整張表
代碼??
-- 刪除
DELETE FROM student WHERE number = 4
-- 修改表名
RENAME TABLE student TO stu
RENAME TABLE stu TO student-- 復制表結構
CREATE TABLE stu LIKE student
運行
SQL---DQL? 數據查詢
-- select 結果 from 表名
基礎查詢
特定列查詢,全部列查詢
select column1,column2 from table
代碼??
-- 查詢指定的列
SELECT NAME,gender,birthday,phone FROM student
運行
??
select * from table?
代碼??
-- 查詢所有的列 *-表示所有的列 查詢的結果是虛擬的表格,不能操作,是只讀的,不能寫入
SELECT * FROM student
運行?
算數運算符?+ - * /
代碼??
-- 查詢結果進行算術運算 + - * /
SELECT NAME,height+1 FROM student
運行?
排除重復行
select distinct column1,column2 from table
代碼??
-- 去除重復數據 查詢結果中所有的列都相同,就視為重復數據
-- DISTINCT關鍵字去除重復數據
SELECT DISTINCT NAME,gender FROM student
運行?
條件查詢
select? 結果? from 表? where 條件? 【group? by 條件? order? by?列? limit】
-- select * from 表名 where 條件?
-- =
-- and 并且?
-- >
-- or 多個條件只需要滿足一個即可
-- !=
-- <>
代碼??
SELECT * FROM student WHERE gender = '男' AND height > 1.90
SELECT * FROM student WHERE gender = '男' OR height > 1.70
SELECT * FROM student WHERE gender != '男'
SELECT * FROM student WHERE gender <> '女
運行?
模糊查詢
like
是否匹配于一個模式 一般和通配符搭配使用,可以判斷字符型數值 或數值型.
通配符: % 任意多個字符
代碼??
-- like '庫%' 模糊匹配
SELECT * FROM student WHERE NAME LIKE '庫%'
運行?
between and?
兩者之間,包含臨界值;
代碼??
-- between 1.65 and 1.98 兩者之間
SELECT * FROM student WHERE height>=1.65 AND height<=1.98
SELECT * FROM student WHERE height BETWEEN 1.65 AND 1.98
運行?
in
判斷某字段的值是否屬于in列表中的某一項
代碼??
-- in(值1,值2,值n) 在給定的值中
SELECT * FROM student WHERE height =1.78 OR height =1.88 OR height =1.98
SELECT * FROM student WHERE height NOT IN(1.78,1.88,1.98)
運行?
is null /is not null
為空的/不為空的
代碼??
-- 查詢身高為null的數據
SELECT * FROM student WHERE height IS NULL
SELECT * FROM student WHERE height IS NOT NULL
運行?
union?
mysql 會把結果集中重復的記錄刪掉
代碼??
-- union 將多個查詢的結果合并,合并時注意列數一致,會去除重復數據
SELECT NAME,gender FROM student WHERE gender = '男'UNION
SELECT NAME,gender FROM student WHERE number>1
運行?
union all
mysql 會把所有的記錄返回,且效率高于union
代碼??
-- union all 只是將查詢的多個結果合并,不會去除重復數據
SELECT NAME,gender FROM student WHERE gender = '男'UNION ALL
SELECT NAME,gender FROM student WHERE number>1
運行?
排序
order by 排序列
asc代表的是升序,desc代表的是降序,如果不寫,默認是升序
代碼??
-- order by 列 asc(升序) desc(降序)
SELECT * FROM student WHERE number>0 ORDER BY number ASC
SELECT * FROM student WHERE number>0 ORDER BY number DESC
SELECT * FROM student WHERE number>0 ORDER BY height DESC
SELECT * FROM student WHERE number>0 ORDER BY reg_time ASC
SELECT * FROM student WHERE number>0 ORDER BY height ASC,reg_time DESC
運行?
數量限制
limit子句:對查詢的顯示結果限制數目 (sql語句最末尾位置)
代碼??
-- 數量限制 實現分頁查詢
-- limit 開始位置,每次查詢的數量
SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 0,3
SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 3,3
SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 6,3
運行?
分組查詢
-- 分組--在一些統計場景中,按照某一個條件進行區分(分組)
-- 統計時,按照性別,班級,年級,部門,年份,月份
-- 把滿足某一個條件的數據分到同一個組中,每一個組內單獨進行處理
select 分組函數,列(要求出現在group by的后面)
from 表
[where 篩選條件]
group by 分組的列表
[having 分組后的篩選]
[order by 子句]
-- 查詢男生,女生各有多少人 ?每個年級各有多少人 每個部門各有多少人
? ?-- 分組統計 男生組統計一次,女生組統計一次
代碼??
SELECT COUNT(*),gender FROM student GROUP BY gender SELECT MAX(height),gender FROM student GROUP BY gender SELECT COUNT(*),DATE_FORMAT(reg_time,'%Y-%m') FROM student GROUP BY DATE_FORMAT(reg_time,'%Y-%m')
運行
? ?-- 統計男生女生各多少人
代碼??
SELECT COUNT(*),gender FROM student GROUP BY gender
運行
代碼??
? ?-- 男生和女生誰的人數大于2
? ?-- having count(*)>2 ?having 條件 是對分組后的結果進行條件篩選
SELECT COUNT(*),gender FROM student GROUP BY gender HAVING COUNT(*)>2
運行?
函數? 查詢結果處理
-- 單行函數:會對查詢中的每一行數據進行處理
-- 分組函數 ?聚合函數(查詢多行,返回一行) ?統計函數
單行函數?
字符函數
-- length(列名) 以字節為單位
代碼?
SELECT LENGTH(NAME),NAME,gender FROM student
運行
-- char_length(列名) 以字符為單位
代碼?
SELECT CHAR_LENGTH(NAME),NAME,gender FROM student
運行
-- concat(str1,str2,str3) 連接多個字符串 ?as ?別名
代碼?
SELECT CONCAT(NAME,":",CHAR_LENGTH(NAME)) AS NAME,gender FROM student
運行
-- upper() 轉大寫 lower() 轉小寫
代碼?
SELECT UPPER(NAME),LOWER(NAME) FROM student
運行
-- substring(字符串,開始位置,截取長度) 開始位置從1開始?
代碼?
SELECT SUBSTRING(NAME,1,2) FROM student
運行
-- instr(字符串,指定的字符)獲取指定字符首次出現位置,找不到返回0
代碼?
SELECT INSTR(NAME,'o') FROM student
運行
-- trim(字符串) 默認是去掉字符串前后空格的
代碼?
SELECT TRIM(NAME),NAME FROM student
運行
-- trim(指定的子串 from 字符串) 可以去掉前后指定的子串
代碼?
SELECT TRIM('a' FROM NAME),NAME FROM student
運行
-- 左填充 右填充到指定長度
代碼?
SELECT LPAD(NAME,5,'a'),RPAD(NAME,5,'b') FROM student
運行
-- replace(列,'old','new')字符串的替換
代碼?
SELECT REPLACE(NAME,'o','O') FROM student
運行?
邏輯處理
-- case when 條件 then 條件成立結果 else 不成立結果 end;
代碼??
SELECTNAME,gender,(CASE WHEN height>=2 THEN '高個子' ELSE '正常身高' END) AS height
FROMstudent
SELECTNAME,gender,(CASE WHEN height>=2 THEN 'A'WHEN height>=1.8 THEN 'B'ELSE 'C' END) AS height
FROMstudent
運行
-- ifnull(列名,'為空時默認信息')
代碼??
SELECTNAME,gender,IFNULL(reg_time,'暫未錄入') AS reg_time
FROMstudent
運行
-- if(條件,'結果1','結果2')
代碼??
SELECTNAME,gender,IF(height>=2,"高個子","正常") AS height
FROMstudent
運行?
數學函數
-- round(數值) ?四舍五入
-- ceil(數值) ?向上取整,返回>=該參數的最小整數
-- floor(數值) ?向下取整,返回<=該參數的最大整數
代碼??
SELECT NAME,gender,ROUND(height),CEIL(1.1),FLOOR(1.9) FROM student
運行
-- mod(被除數,除數) ?取余,被除數為正,則為正;被除數為負,則為負
代碼??
SELECT height,number,MOD(height,number) FROM student
運行
-- truncate(數值,保留小數的位數) ?截斷,小數點后截斷到幾位
-- rand() ?獲取隨機數,返回0-1之間的小數
代碼??
SELECT NAME,gender,TRUNCATE(height,1),height,RAND() FROM student
運行?
日期函數?
-- now() 年月日 時分秒 ?獲取系統當前時間
-- curdate() 年月日
-- curtime() 時分秒
代碼??
SELECT NOW(),CURDATE(),CURTIME() FROM student
運行
-- year(日期) 將日期格式化為年
-- month(日期) 將日期格式化為月
代碼??
SELECT YEAR(birthday),MONTH(birthday) FROM student
SELECT * FROM student WHERE MONTH(birthday) = 6
SELECT COUNT(*),YEAR(birthday) FROM student GROUP BY YEAR(birthday)
運行
-- str_to_date('2022-3-6','%Y-%m-%d') 將字符串日期格式化為日期類型
代碼??
SELECT STR_TO_DATE('2022-3-6','%Y-%m-%d') FROM student
運行
-- date_format(birthday,'%Y-%m') 將日期格式化為指定的字符串
代碼??
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
SELECT COUNT(*),DATE_FORMAT(reg_time,'%Y-%m') FROM student GROUP BY DATE_FORMAT(reg_time,'%Y-%m')
運行
- datediff(CURDATE(),birthday) 計算兩個日期之間相差的天數
代碼? ?
SELECT DATEDIFF(CURDATE(),birthday) FROM student
運行?
分組函數
-- sum() 求和
-- avg() 平均值
-- max() 最大值
-- min() 最小值
-- count() 統計個數
代碼??
SELECT SUM(height) FROM student
SELECT AVG(height) FROM student
SELECT MAX(height) FROM student
SELECT MIN(height) FROM student
SELECT COUNT(*) FROM student