SQL 語句分類
- Data Definition Language (DDL 數(shù)據(jù)定義語言) 如:建庫婶肩,建表,用來定義數(shù)據(jù)庫對象
關鍵字:create、drop此蜈、alter 等 - Data Manipulation Language(DML 數(shù)據(jù)操縱語言)勿她,如:對表中的記錄操作增刪改
關鍵字:insert袄秩、delete、update 等 - Data Query Language(DQL 數(shù)據(jù)查詢語言)逢并,如:對表中的查詢操作
關鍵字:select之剧、where 等 - Data Control Language(DCL 數(shù)據(jù)控制語言),如:對用戶權限的設置
關鍵字:GRANT砍聊、REVOKE等
MySQL 的語法
- 每條語句以分號結尾背稼,如果在 SQLyog 中不是必須加的。
- SQL 中不區(qū)分大小寫玻蝌,關鍵字中認為大寫和小寫是一樣的
- 3 種注釋:
注釋的語法
- --空格 單行注釋
- /* */ 多行注釋
- 這是 mysql 特有的注釋方式
DDL:
操作數(shù)據(jù)庫蟹肘、表
一、操作數(shù)據(jù)庫:CRUD
-
C:Create 創(chuàng)建
* 創(chuàng)建數(shù)據(jù)庫
*create database 數(shù)據(jù)庫名稱;
* 創(chuàng)建db4數(shù)據(jù)庫俯树,判斷是否存在
*create database if not exists 數(shù)據(jù)庫名稱帘腹;
* 創(chuàng)建db4數(shù)據(jù)庫,并指定字符集GBK许饿;
*create database 數(shù)據(jù)庫名稱 character set 字符集名;
* 綜合一點的練習:創(chuàng)建db4數(shù)據(jù)庫竹椒,判斷是否存在,并指定字符集GBK米辐;
*create database if not exists db4 character set gbk;
-
R:Retrieve 查詢
* 查詢所有數(shù)據(jù)庫的名稱
show databases;
*查看某個數(shù)據(jù)庫庫的字符集胸完,查詢某個數(shù)據(jù)庫的創(chuàng)建語句
*SHOW creat databese 數(shù)據(jù)庫的名稱;
-
U:Update 修改
* 修改數(shù)據(jù)庫的字符集
*alter database 數(shù)據(jù)庫名稱 character set 字符集名稱;
-
D:Delete 刪除
* 刪除數(shù)據(jù)庫翘贮;
*drop database 數(shù)據(jù)庫名稱;
* 判斷數(shù)據(jù)庫是否存在赊窥,存在再刪除;
*drop database if not exists 數(shù)據(jù)庫名稱狸页;
-
使用數(shù)據(jù)庫
* 查詢當前正在使用的數(shù)據(jù)庫名稱锨能;
*selcet database();
* 使用數(shù)據(jù)庫扯再;
*use 數(shù)據(jù)庫名稱;
二、操作表
- C:Create 創(chuàng)建
語法:create table 表名(
列名1 數(shù)據(jù)類型1,
列名2 數(shù)據(jù)類型2,
列名3 數(shù)據(jù)類型3,
...
列名n 數(shù)據(jù)類型n
)址遇;
*最后一列熄阻,不需要加逗號“,”
- 數(shù)據(jù)類型:
- int : 整數(shù)類型倔约,例如:age int,
- double :小數(shù)類型秃殉,例如:score double (5,2);表示最大值是999.99
- date :日期,只包含年月日的日期浸剩,yyyy -MM -dd
- datetime :日期钾军,包含年月日時分秒 ,yyyy -MM -dd HH:mm:ss
- timestamp :時間戳類型 绢要,包含年月日時分秒 吏恭,yyyy -MM -dd HH:mm:ss
*區(qū)別,如果是timestamp重罪,如果將來不給這個字段賦值樱哼,或者賦值為null ,則默認使用當前的系統(tǒng)時間,來自動賦值剿配。 - varchar :字符串 例如:name varchar(20);表示姓名最大20字符搅幅;zhangsan 八個字符,張三惨篱,2個字符
超出最大字符會報錯*創(chuàng)建表 盏筐;
*create table student(
id int,
name varchar(32),
age int,
scroe double(4,1),
birthday date,
intset_time timestamp
);
* 復制表;
*create table 表名 like 被復制的表名;
- R:Retrieve 查詢
* 查詢某個數(shù)據(jù)庫中所有表的名稱砸讳;
*show tables;
* 查詢表結構琢融;
*desc 表名;
- U:Update 修改
- 修改表名;
* alter table 表名 rename to 新的表名簿寂;
- 修改表的字符集漾抬;
* alter table 表名 character set 字符集名稱;
- 添加一列:
* alter table 表名 add 列名 數(shù)據(jù)類型常遂;
- 修改列名稱 類型纳令;
* alter table 表名 change 原列名 新列名 新數(shù)據(jù)類型;
* alter table 表名 modify 原列名 新列名 新數(shù)據(jù)類型克胳;
- 刪除列平绩;
* alter table 表名 drop 列名;
- D:Delete 刪除
* 刪除表漠另;
*drop table 表名捏雌;
*drop table if exists 表名;
客戶端圖形化工具:SQLYog
安裝:
傻瓜式操作,安裝完畢以后笆搓,注意連接數(shù)據(jù)庫性湿。
配置新連接報錯:錯誤號碼 2058纬傲,分析是 mysql 密碼加密方法變了。
解決方法:windows 下cmd 登錄 mysql -u root -p 登錄你的 mysql 數(shù)據(jù)庫肤频,然后執(zhí)行這條SQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';(注意分號)
password 是你自己設置的root密碼叹括;
然后在重新配置SQLyog的連接,則可連接成功了宵荒,就OK了汁雷。
DML:增刪該表中的數(shù)據(jù)
- 添加數(shù)據(jù):
語法:
* insert into 表名(列名1,列名2,....列名n) values(值1,值2,值3,...值n);
注意事項:
列名和值要一一對應,
如果表名后骇扇,不定義列名摔竿,則默認給所有列添加值面粮、
* insert into 表名 values(值1,值2,值3,...值n);建議不偷懶
除了數(shù)字類型少孝,其他類型需要使用引號(單雙都可以)引起來。
問題自己在創(chuàng)建表的時候使用timestamp,不能匹配當前系統(tǒng)時間
2.刪除數(shù)據(jù):
- 語法:
- delete from 表名[ where 條件]
注意:
1熬苍、如果不加條件稍走,則刪除表中所有的記錄
2、如果要刪除所有記錄柴底,我們有兩種做法婿脸,
* 1.delete from 表名 ----------- 不推薦使用,有多少條記錄就會執(zhí)行多少次刪除操作柄驻,效率低
* 2.truncate table 表名 ------- 推薦使用狐树,刪除表,然后再創(chuàng)建一個一摸一樣的空表,效率更高
3.修改數(shù)據(jù):
語法: - update 表名 set 列名1=值1,列名2= 值2.... [where 條件]鸿脓;
注意:
如果不加任何條件抑钟,則會將表中全部記錄修改
DQL : 查詢
*select * from 表名
語法:
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之后的條件
order by
排序
limit
分頁限定
2、基礎查詢
1.多個字段的查詢
select 字段名1野哭,字段名2....from 表名在塔;
注意如果查詢所有字段則可以使用select * from 表名,這是簡化的形式拨黔,用* 代替
2.去除重復
select distinct 結果集 from 表名蛔溃;
如果去除多個字段重復的,必須是結果集完全一致的情況下才行篱蝇,
3.計算列
一般可以使用四則運算計算一些列的值(一般智慧進行數(shù)值的運算)
ifnull(表達式1贺待,表達式2); 表達式1:哪個字段需要判斷是否為null零截,表達式2:如果為null麸塞,替換為。瞻润。
select name,math,english,math+english from student;
select name,math,english,math+ifnull(english,0) from student;誰有可能為null喘垂,就ifnull誰甜刻。
如果有null參與計算,計算結果都為null正勒,
4.起別名
as :as 也可以省略
select name,math,english,math+ifnull(english,0) AS 總分 from student;
select name,math,english,math+ifnull(english,0) 總分 from student;或者用空格
3得院、條件查詢
1.where 子句后跟條件
2.運算符
* >、<章贞、<=祥绞、>=、=鸭限、<> ----------<>在 SQL 中表示不等于蜕径,在 mysql 中也可以使用!=
沒有==
* BETWEEN...AND ---------在一個范圍之內(nèi),如:between 100 and 200相當于條件在 100 到 200 之間败京,包頭又包尾
* IN(集合) ------------集合表示多個值兜喻,使用逗號分隔
* LIKE '張%' ---------------模糊查詢
占位符:
_:單個任意字符
%:多個任意字符
* IS NULL-------------查詢某一列為 NULL 的值,注:不能寫=NULL
邏輯運算符
* and 或 && -----------------與赡麦,SQL 中建議使用前者朴皆,后者并不通用。
* or 或 || ------------或
* not 或 !------------------- 非
例如:
select * from student where age >20;--查詢年齡大于20
select * from student where age >=20;--查詢年齡大于等于20
select * from student where age =20;--查詢年齡等于20
select * from student where age !=20;--查詢年齡不等于20
select * from student where age <>20;--查詢年齡不等于20
select * from student where age >=20 and age <=30;--查詢年齡大于等于20泛粹,小于等于30
select * from student where age between 20 and 30;--查詢年齡大于等于20遂铡,小于等于30
--查詢年齡22歲,18歲晶姊,25歲的人扒接,
select * from student where age =22 or age = 18 or age = 25;
select * from student where age in(22,18,25) ;
--查詢英語成績?yōu)閚ull;
select * from student where English is null们衙;
--查詢英語成績不為null
select * from student where English is not null钾怔;
-- 查詢姓馬的有哪些
select * from student where name like '馬%';
--查詢第二個字是化的人
select * from student where name like '_馬%'砍艾;
--查詢姓名是三個字的人
select * from student where name like '___'蒂教;--三個下劃線_
--查詢姓名中包含馬的人
select * from student where name like '%馬%';