相關術語: DB :資料庫:在硬碟上以文件的方式存在DBMS:資料庫管理系統:例如mysql,oracle,sqlserver…SQL:一門適用於所有DBMS,對DB進行操作的標準規劃語言,DQL:資料庫查詢語句 select,DML:資料庫管理語句,修改表中數據update,insert,dele ...
相關術語:
DB :資料庫:在硬碟上以文件的方式存在
DBMS:資料庫管理系統:例如mysql,oracle,sqlserver…
SQL:一門適用於所有DBMS,對DB進行操作的標準規劃語言,
DQL:資料庫查詢語句 select,
DML:資料庫管理語句,修改表中數據update,insert,delete,
DDL:資料庫管理語句,修改表中的結構drop,create,alter,
TCL:commit提交事務,rollback回滾事務,
DCL:grant授權,revoke撤銷許可權
一.DOS視窗命令
DOS視窗進入資料庫 mysql -uroot -p密碼
查看資料庫:show databases;
創建資料庫:create database 資料庫名字;
使用某個資料庫:use 資料庫名字;
查看使用資料庫中的表:show tables;
資料庫初始化執行sql文件:source +sql文件路徑(直接拖就行)
刪除資料庫:drop database 資料庫名字;
查看表結構:desc+表名;
查看表中數據:select * from 表名;(當在DOS界面中顯示MYSQL資料庫中的表的信息時,可能會出現中文亂碼問題,出現是原因是因為DOS視窗預設字元集為GBK格式,如果當前MYSQL設置的預設編碼格式非GBK格式,則可能會出現亂碼。
解決方法:在輸出信息前,執行以下語句:
set names gbk;)
查詢當前使用的哪個資料庫:select database();也可直接再use一下需要的資料庫;
查詢mysql的版本號:select version();
結束一條語句:\c 命令
退出mysql:exit 命令
查看創建表的時候使用的sql語句:show create table 表名;
二.單表簡單查詢
1.簡單的查詢語句(DQL)
語法格式:select 欄位名1,欄位名2 *12,欄位名3 as ’表名‘ ,… from 表名;
欄位二表示欄位可以進行數學運算;
欄位三表示可以重新為該欄位命名,字元串用單引號 (as可以省略,用空格替換!);
2.查詢所有欄位:
select * from 表名 註意:實際開發中不建議*因為效率較低
3.條件查詢格式:
select 欄位,欄位…from 表名 where 條件;條件(> ,>=,<,<=,<>或者!=,between 小數字 and 大數字 ,)
運算符 | 說明 |
= | 等於 |
<> 或 != | 不等於 |
< | 小於 |
<= | 小於等於 |
> | 大於 |
>= | 大於等於 |
between … and … | 兩個值之間 |
is null | 為null(is not null不為空) |
and | 並且 |
or | 或者 |
in | 包含,相當於多個or(not in 不在這個範圍中) |
not not | 可以取非,主要用在is或in中 |
like | like成為模糊查詢,支持%或_匹配 |
in後面不是區間而是具體的值in(800,1000)意思是要麼800要麼1000
4.模糊查詢like
(必須掌握兩個符號,一個是%,一個是_)
%表示任意多個字元,_代表一個字元。如果_或%需要轉化為普通字元就在前面加‘ \ ’ 起到轉義的作用。
5.排序(升序和降序):
預設指的是升序
格式:select 欄位1,欄位2,from表名 order by 欄位名 asc(升序) ;
select 欄位1,欄位2,from表名 order by 欄位名 desc(降序) ;
如果按照某個欄位排序,而該欄位又相等則再在後面的欄位加上,第二個欄位名 asc/desc;
例如:select 欄位1,欄位2,from表名 order by 欄位名1 desc,欄位名2 asc;(越靠前的欄位越能起主導作用,order by後面是最後執行的)
6.分組函數:
別名:多行處理函數
所有的分組函數都是對某一組函數進行操作的 註意:分組函數自動忽略null,統計不上並且分組函數不能寫在where語句後面,分
組函數即使沒有group by也自己成為一組,where的優先順序高於group by,所以where不執行完,分組函數執行不了。
count計數:select count(*) from 表名; //統計的是總記錄條數。
select count(欄位名)from 表名; //統計的是當前欄位不為null的數據條數。
sum求和:select sum(欄位名) from 表名;
avg平均值:select avg(欄位名) from 表名;
max最大值:select max(欄位名) from 表名;
min最小值:select min(欄位名) from 表名;
7.單行處理函數:
單行處理函數的特點:一個輸入對應一個輸出。
單行處理函數常見:
lower 轉換小寫
select lower(欄位名) as 別名 from 表名;
upper 轉換大寫
select upper(欄位名) as 別名 from 表名;
substr 取子串(substr(被截取的字元串, 起始下標,截取的長度))
select substr(欄位名, 1, 1) as 別名 from 表名;
concat函數進行字元串的拼接
select concat(欄位名1,欄位名2) from 表名;
length 取長度
select length(欄位名) 別名 from 表名;
trim 去空格
select * from emp where ename = trim(' 數據');
str_to_date 將字元串轉換成日期
date_format 格式化日期
format 設置千分位
case..when..then..when..then..else..end
當員工的工作崗位是MANAGER的時候,工資上調10%,當工作崗位是SALESMAN的時候,工資上調50%,其它正常。 (註意:不修改資料庫,只是將查詢結果顯示為工資上調)
select
ename,job, sal as oldsal,
(case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal
from
emp;
round 四捨五入
select round(1236.567, 0) as 別名 from 表名; //保留整數位。
select round(1236.567, 1) as 別名from 表名; //保留1個小數
select round(1236.567, 2) as 別名from 表名; //保留2個小數
select round(1236.567, -1) as 別名from 表名; // 保留到十位。
rand() 生成隨機數
select round(rand()*100,0) from emp; // 100以內的隨機數
ifnull 可以將 null 轉換成一個具體值
ifnull是空處理函數。專門處理空的。在所有資料庫當中,只要有NULL參與的數學運算,最終結果就是NULL。
註意:NULL只要參與運算,最終結果一定是NULL。為了避免這個現象,需要使用ifnull函數。ifnull函數用法:ifnull(數據, 被當做哪個值)。如果“數據”為NULL的時候,把這個數據結構當做哪個值。
8.group by 和 having
group by:按照某個欄位或者某些分段進行分組。
例子:select 分組函數 from 表名 group by 欄位名; 執行順序:from-> group by -> select。
註意:
分組函數一般都是和group by聯合使用,這也是為什麼稱之為分組函數的原因,並且任何一個分組函數(count,max,avg,min,sum)都是在group by執行完成後才執行。
如果一個sql語句後面有group by則查詢的欄位欄位只能有分組欄位,和分組函數。
having:having是對分組之後的數據進行再次過濾。可以理解作為優先順序低的where;
9.distinct去重記錄:
select distinct 欄位1,欄位2 from 表;使得欄位1和欄位2聯合起來去重。
註意:distinct必須出現在所有欄位的最前面。不可:select 欄位1,distinct 欄位2 from 表;
count(diatinct 欄位),先為欄位去重,再統計數據條數;
10.總結完整DQL語句
select …from…where…group by…having…order by;
以及查詢的順序;
提示:
1.任何一條sql語句都以’’ ; ''結尾;
2.sql語句不區分大小寫;
3.字元串用單引號括起來;
4.任何值與null進行運算結果都是null;
本文來自博客園,作者:腹白,轉載請註明原文鏈接:https://www.cnblogs.com/wyh518/