黑馬SQL筆記 - 基礎(chǔ)篇 - 1. SQL

MySQL概述

MySQL啟動

net start mysql80
net stopmysql80

MySQL客戶端連接

需配置環(huán)境變量
增加路徑 C:\Program Files\MySQL\MySQL Server 8.0\bin

mysql [-h 127.0.0.1] [-p 3306] -u root -p
mysql -u root -p

圖形界面操作

創(chuàng)建數(shù)據(jù)庫
右鍵‘@localhost’-->new-->scheam

創(chuàng)建表結(jié)構(gòu)
右鍵表-->new-->table

修改表
右鍵表-->new-->modify table

用sql語句操作
右鍵表/數(shù)據(jù)庫-->new-->query console

SQL

DDL語法

數(shù)據(jù)庫操作

# 查詢所有數(shù)據(jù)庫
show databases;

# 創(chuàng)建數(shù)據(jù)庫
create database itcsat;

# 創(chuàng)建數(shù)據(jù)庫并指定類型
create database itheima default charset utf8mb4;

# 添加if not exists避免報錯(如果已有相同名稱數(shù)據(jù)庫會報錯)
create database if not exists test;

# 刪除數(shù)據(jù)庫
drop database if exists test

# 添加if exists避免報錯(如果沒有該名稱數(shù)據(jù)庫會報錯)
drop database if exists test

# 使用itcast數(shù)據(jù)庫
use itcast;

# 查看當(dāng)前的數(shù)據(jù)庫
select database();

表操作

# 創(chuàng)建新表tb_user
create table tb_user(
    id int comment '編號',
    name varchar(50) comment '姓名',
    age int comment '年齡',
    gender varchar(1) comment '性別'
) comment '用戶表';

# 創(chuàng)建新表emp
create table emp(
    id int comment '編號',
    workno varchar(10) comment '工號',
    name varchar(10) comment '姓名',
    gender char(1) comment '性別',
    age tinyint unsigned comment '年齡',
    idcard char(18) comment '身份證號',
    entrydate date comment '入職時間'
) comment '員工表';

# 查看表信息(簡略)
desc tb_user;

# 查看表信息(詳細(xì))
show create table tb_user;

# 刪除表
drop table [ if exists ] 表名;

# 刪除指定表并重新創(chuàng)建該表(原來的數(shù)據(jù)都沒了芬为,表結(jié)構(gòu)還在)
truncate table 表名;

表字段操作

# 添加字段nickname
alter table emp add nickname varchar(20) comment '昵稱';

# 修改字段的數(shù)據(jù)類型
alter table 表名 modify 字段名 新數(shù)據(jù)類型 (長度);

# 修改字段名和其數(shù)據(jù)類型(舊:nickname,新username)
alter table emp change nickname username varchar(30) comment '昵稱';

# 刪除字段(刪除emp表的username字段)
alter table emp username;

# 修改表名
alter table emp rename to employee;

DML語法

對數(shù)據(jù)庫中表中的數(shù)據(jù)操作
添加數(shù)據(jù)

# 給指定字段添加數(shù)據(jù)
insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...);

# 查看表
select * from employee;

# 給全部字段添加數(shù)據(jù)
insert into 表名 (值1, 值2, ...)

# 批量添加數(shù)據(jù)歧寺,用逗號連接多個值
insert into employee values(3,'3','韋一笑','男',38,'123456789012345670','2005-01-01'),(4,'4','趙敏','女',18,'123456789012345670','2005-01-01');

修改數(shù)據(jù)

update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [ where 條件 ] ;

# 修改id為1的數(shù)據(jù)呐芥,將name修改為itheima
update employee set name = 'itheima' where id = 1;

# 修改id為1的數(shù)據(jù), 將name修改為小昭, gender修改為 女(逗號連接)
update employee set name = '小昭' , gender = '女' where id = 1;

# 將所有的員工入職日期修改為 2008-01-01
update employee set entrydate = '2008-01-01';

刪除數(shù)據(jù)

delete from 表名 [ where 條件 ] ;

# 刪除gender為女的員工
delete from employee  where gender = '女';

# 刪除所有員工
delete from employee;

DQL語法

查詢數(shù)據(jù)庫中表的記錄

# 查詢多個字段
select 字段1, 字段2, 字段3 ... from 表名 ;

# 查詢所有字段()不推薦
select * from 表名 ;

# 查詢字段時可以給字段設(shè)置別名(省去as也行)
select 字段1 [ AS 別名1 ] , 字段2 [ AS 別名2 ] ... from 表名;
select 字段1 [ 別名1 ] , 字段2 [ 別名2 ] ... from 表名;

# 去除重復(fù)元素
select distinct 字段列表 from 表名;

# 例子
select name,workno,age from emp;
select workaddress as '工作地址' from emp;
select workaddress '工作地址' from emp;
select distinct  workaddress '工作地址' from emp;

條件查詢

比較運算符

  • between ... and ... 在某個范圍之內(nèi)(含最小伍伤、最大值)
  • in(...) 在in之后的列表中的值蓝纲,多選一
  • like 占位符 模糊匹配(_匹配單個字符, %匹配任意個字符)

邏輯運算符

  • AND 或 && 且
  • OR 或 || 或
  • NOT 或 ! 非
# 查詢年齡小于等于 20 的員工信息
select * from emp where age <= 20;

# 查詢沒有身份證號的員工信息(null的)
select * from emp where idcard is null;

# 查詢有身份證號的員工信息(非null的)
select * from emp where idcard is not null;

# 查詢年齡不等于 88 的員工信息
select * from emp where age != 88;
select * from emp where age <> 88;

# 查詢年齡在15歲(包含) 到 20歲(包含)之間的員工信息
select * from emp where age >= 15 && age <= 20;
select * from emp where age >= 15 and age <= 20;
select * from emp where age between 15 and 20;

# 查詢性別為 女 且年齡小于 25歲的員工信息
select * from emp where gender = '女' and age < 25;

# 查詢年齡等于18 或 20 或 40 的員工信息
select * from emp where age = 18 or age = 20 or age =40;
select * from emp where age in(18,20,40);

# 查詢姓名為兩個字的員工信息(兩個下劃線)
select * from emp where name like '__';

# 查詢身份證號最后一位是X的員工信息
select * from emp where idcard like '%X';
select * from emp where idcard like '_________________X';

聚合函數(shù)

  • count 統(tǒng)計數(shù)量
  • max
  • min
  • avg 平均值
  • sum
# 統(tǒng)計該企業(yè)員工數(shù)量
select count(*) from emp;
select count(idcard) from emp; -- 統(tǒng)計的是idcard字段不為null的記錄數(shù)

# 統(tǒng)計該企業(yè)員工的最大年齡
select max(age) from emp;

# 統(tǒng)計西安地區(qū)員工的年齡之和
select sum(age) from emp where workaddress = '西安';

分組查詢

where與having區(qū)別

  • 執(zhí)行時機(jī)不同:where是分組之前進(jìn)行過濾,不滿足where條件喂击,不參與分組;而having是分組之后對結(jié)果進(jìn)行過濾淤翔。
  • 判斷條件不同:where不能對聚合函數(shù)進(jìn)行判斷翰绊,而having可以。

執(zhí)行順序: where > 聚合函數(shù) > having 旁壮。

SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組 后過濾條件 ];

# 根據(jù)性別分組 , 統(tǒng)計男性員工 和 女性員工的數(shù)量
select count(*) from emp group by gender; -- 只要count結(jié)果辞做,沒有對應(yīng)男女

# 加上性別字段,能對應(yīng)上count結(jié)果 (count(*) from emp group by gender類似于一個字段)
select gender, count(*) from emp group by gender;

# 根據(jù)性別分組 , 統(tǒng)計男性員工 和 女性員工的平均年齡
select  gender, avg(age) from emp group by gender;

# 查詢年齡小于45的員工 , 并根據(jù)工作地址分組 , 獲取員工數(shù)量大于等于3的工作地址
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) > 3;
-- 取別名
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count > 3;

# 統(tǒng)計各個工作地址上班的男性及女性員工的數(shù)量
select workaddress, gender, count(*) people_count from emp group by workaddress, gender;

排序查詢

排序方式

  • ASC : 升序(默認(rèn)值)
  • DESC: 降序
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;

# 根據(jù)年齡對公司的員工進(jìn)行升序排序
select * from emp order by  age asc;

# 根據(jù)入職時間, 對員工進(jìn)行降序排序
select * from emp order by  entrydate desc;

# 根據(jù)年齡對公司的員工進(jìn)行升序排序 , 年齡相同 , 再按照入職時間進(jìn)行降序排序
select * from emp order by age asc, entrydate desc;

分頁查詢

  • 起始索引從0開始寡具,起始索引 = (查詢頁碼 - 1)* 每頁顯示記錄數(shù)。
  • 分頁查詢是數(shù)據(jù)庫的方言稚补,不同的數(shù)據(jù)庫有不同的實現(xiàn)童叠,MySQL中是LIMIT。
  • 如果查詢的是第一頁數(shù)據(jù),起始索引可以省略厦坛,直接簡寫為 limit 10五垮。
select 字段列表 from 表名 limit 起始索引, 查詢記錄數(shù) ;

# 查詢第1頁員工數(shù)據(jù), 每頁展示10條記錄
select * from emp limit 0,10;
select * from emp limit 10;

# 查詢第2頁員工數(shù)據(jù), 每頁展示10條記錄 --------> (頁碼-1)*頁展示記錄數(shù)
select * from emp limit 10,10;

執(zhí)行順序

編寫順序:
select-->from-->where-->group by-->having-->order by-->limit
執(zhí)行順序:
from-->where-->group by-->having-->select-->order by-->limit

DCL語法

管理數(shù)據(jù)庫用戶、控制數(shù)據(jù)庫的訪問權(quán)限

用戶管理操作

查詢用戶

use mysql;
select * from mysql.user;
-- Host代表當(dāng)前用戶訪問的主機(jī),如果為localhost,僅代表只能夠在當(dāng)前本機(jī)訪問,是不可以遠(yuǎn)程訪問的杜秸。User代表的是訪問該數(shù)據(jù)庫的用戶名放仗。在MySQL中需要通過Host和User來唯一標(biāo)識一個用戶.

創(chuàng)建用戶

CREATE USER '用戶名'@'主機(jī)名' IDENTIFIED BY '密碼';
-- 創(chuàng)建用戶itcast, 只能夠在當(dāng)前主機(jī)localhost訪問, 密碼123456;
create user 'itcast'@'localhost' identified by '123456';
-- 創(chuàng)建用戶heima, 可以在任意主機(jī)訪問該數(shù)據(jù)庫, 密碼123456;
create  user 'heima'@'%' identified by '123456';

修改用戶密碼

ALTER USER '用戶名'@'主機(jī)名' IDENTIFIED WITH mysql_native_password BY '新密碼' ;
-- 修改用戶heima的訪問密碼為1234;
alter user 'heima'@'%' identified with mysql_native_password by '1234';

刪除用戶

DROP USER '用戶名'@'主機(jī)名' ;
-- 刪除itcast@localhost用戶
drop user 'itcast'@'localhost' ;

權(quán)限控制

常用權(quán)限

  • ALL, ALL PRIVILEGES(所有權(quán)限)
  • SELECT(查詢數(shù)據(jù))
  • INSERT(插入數(shù)據(jù))
  • UPDATE(修改數(shù)據(jù))
  • DELETE(刪除數(shù)據(jù))
  • ALTER(修改表)
  • DROP(刪除數(shù)據(jù)庫/表/視圖)
  • CREATE(創(chuàng)建數(shù)據(jù)庫/表)

多個權(quán)限之間,使用逗號分隔;授權(quán)時,數(shù)據(jù)庫名和表名可以使用 * 進(jìn)行通配撬碟,代表所有诞挨。

查詢權(quán)限

SHOW GRANTS FOR '用戶名'@'主機(jī)名' ;

# 查詢 'heima'@'%' 用戶的權(quán)限
show grants for 'heima'@'%';

授予權(quán)限

GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機(jī)名';

# 授予 'heima'@'%' 用戶itcast數(shù)據(jù)庫所有表的所有操作權(quán)限
grant all on itcast.* to 'heima'@'%';

撤銷權(quán)限

REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機(jī)名';

# 撤銷 'heima'@'%' 用戶的itcast數(shù)據(jù)庫的所有權(quán)限
revoke all on itcast.* from 'heima'@'%';
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呢蛤,隨后出現(xiàn)的幾起案子惶傻,更是在濱河造成了極大的恐慌,老刑警劉巖其障,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件银室,死亡現(xiàn)場離奇詭異,居然都是意外死亡励翼,警方通過查閱死者的電腦和手機(jī)蜈敢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汽抚,“玉大人抓狭,你說我怎么就攤上這事∈獬龋” “怎么了辐宾?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膨蛮。 經(jīng)常有香客問我叠纹,道長,這世上最難降的妖魔是什么敞葛? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任誉察,我火速辦了婚禮,結(jié)果婚禮上惹谐,老公的妹妹穿的比我還像新娘持偏。我一直安慰自己,他們只是感情好氨肌,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布鸿秆。 她就那樣靜靜地躺著,像睡著了一般怎囚。 火紅的嫁衣襯著肌膚如雪卿叽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音考婴,去河邊找鬼贩虾。 笑死,一個胖子當(dāng)著我的面吹牛沥阱,可吹牛的內(nèi)容都是我干的缎罢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼考杉,長吁一口氣:“原來是場噩夢啊……” “哼策精!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奔则,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蛮寂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后易茬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酬蹋,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年抽莱,在試婚紗的時候發(fā)現(xiàn)自己被綠了范抓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡食铐,死狀恐怖匕垫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虐呻,我是刑警寧澤象泵,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站斟叼,受9級特大地震影響偶惠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朗涩,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一忽孽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谢床,春花似錦兄一、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渡讼,卻和暖如春蹋盆,著一層夾襖步出監(jiān)牢的瞬間费薄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工栖雾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伟众。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓析藕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凳厢。 傳聞我的和親對象是個殘疾皇子账胧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容