文章目錄
- 1.名詞解釋
- 2.如何啟動mysql數據庫
- 3.mysql常用命令
- 4.數據庫當中最基本的單元是表:table
- 5.關于SQL語句的分類
- 6.簡單查詢
- 7.條件查詢
- 8.排序
- 9.數據處理函數
- 單行處理函數常見的有哪些?
- 10.分組函數(多行處理函數)
1.名詞解釋
- 數據庫:英文單詞DataBase,簡稱DB。按照一定格式存儲數據的一些文件的組合。顧名思義:存儲數據的倉庫,實際上就是一堆文件。這些文件中存儲了具有特定格式的數據。
- 數據庫管理系統:DataBaseManagementSystem,簡稱DBMS。數據庫管理系統是專門用來管理數據庫中數據的,數據庫管理系統可以對數據庫當中的數據進行增刪改查。常見的數據庫管理系統:MySQL、Oracle、MS SqlServer、DB2、sybase等…
- SQL:結構化查詢語言程序員需要學習SQL語句,程序員通過編寫SQL語句,然后DBMS負責執行SQL語句,最終來完成數據庫中數據的增刪改查操作。SQL是一套標準,程序員主要學習的就是SQL語句,這個SQL在mysql中可以使用,同時在Oracle中也可以使用,在DB2中也可以使用。
- 三者之間的關系?
DBMS–執行–> SQL --操作–> DB
先安裝數據庫管理系統MySQL,然后學習SQL語句怎么寫,編寫SQL語句之后,DBMS
對SQL語句進行執行,最終來完成數據庫的數據管理。
2.如何啟動mysql數據庫
win+r鍵輸入cmd代開windows命令窗口,然后輸入:mysql -uroot -p,然后輸入密碼即可登錄上mysql數據庫。
3.mysql常用命令
-
退出mysql :exit
-
查看mysql中有哪些數據庫?-》show databases; 注意:以分號結尾,分號是英文的分號。
-
怎么選擇使用某個數據庫呢?-》mysql> use test;
Database changed
表示正在使用一個名字叫做test的數據庫。 -
怎么創建數據庫呢?-》mysql> create database bjpowernode;
Query OK, 1 row affected (0.00 sec) -
查看某個數據庫下有哪些表?-》mysql> show tables;
-
查看mysql數據庫的版本號:-》mysql> select version();
-
查看當前使用的是哪個數據庫?-》mysql> select database();
-
如何倒入數據表呢?-》使用source+路徑即可,路徑不可以包含中文
-
怎么查看表中的數據呢?-》select * from 表名; //統一執行這個SQL語句。
-
不看表中的數據,只看表的結構,有一個命令:-》desc 表名; (describe的縮寫)
注意1:mysql是不見“;”不執行,“;”表示結束!
注意2:以上的命令不區分大小寫,都行。
4.數據庫當中最基本的單元是表:table
什么是表table?為什么用表來存儲數據呢?-》數據庫當中是以表格的形式表示數據的。因為表比較直觀。
任何一張表都有行和列:
行(row):被稱為數據/記錄。
列(column):被稱為字段。
了解一下:每一個字段都有:字段名、數據類型、約束等屬性。字段名可以理解,是一個普通的名字,見名知意就行。數據類型:字符串,數字,日期等,后面會說到。約束:約束也有很多,其中一個叫做唯一性約束,這種約束添加之后,該字段中的數據不能重復。
5.關于SQL語句的分類
SQL語句有很多,最好進行分門別類,這樣更容易記憶。
- DQL:
數據查詢語言(凡是帶有select關鍵字的都是查詢語句)
select… - DML:
數據操作語言(凡是對表當中的數據進行增刪改的都是DML)
insert delete update
insert 增
delete 刪
update 改
這個主要是操作表中的數據data。 - DDL:
數據定義語言
凡是帶有create、drop、alter的都是DDL。
DDL主要操作的是表的結構。不是表中的數據。
create:新建,等同于增
drop:刪除
alter:修改
這個增刪改和DML不同,這個主要是對表結構進行操作。 - DCL:
是數據控制語言。
例如:授權grant、撤銷權限revoke… - TCL:
是事務控制語言
包括:
事務提交:commit;
事務回滾:rollback;
6.簡單查詢
- 查詢一個字段?
select 字段名 from 表名;
其中要注意:
select和from都是關鍵字。
字段名和表名都是標識符。
強調:
對于SQL語句來說,是通用的,
所有的SQL語句以“;”結尾。
另外SQL語句不區分大小寫,都行。 - 查詢兩個字段,或者多個字段怎么辦?-》使用逗號隔開“,”
- 查詢所有字段怎么辦?
第一種方式:可以把每個字段都寫上
select a,b,c,d,e,f… from tablename;
第二種方式:可以使用*
select * from tablename; - 給查詢的列起別名?-》 select deptno,dname as deptname from dept;
使用as關鍵字起別名。
注意:只是將顯示的查詢結果列名顯示為deptname,原表列名還是叫:dname
記住:select語句是永遠都不會進行修改操作的。(因為只負責查詢)
as關鍵字可以省略嗎?可以的(使用空格即可)
select deptno,dname deptname from dept;
假設起別名的時候,別名里面有空格,怎么辦?(有空格、中文都可以用這個方法)
select deptno,dname ‘dept name’ from dept; //加單引號
注意:在所有的數據庫當中,字符串統一使用單引號括起來,單引號是標準 - 字段可以使用數學表達式!-》select ename,sal*12 from emp;
7.條件查詢
- 什么是條件查詢?-》不是將表中所有數據都查出來。是查詢出來符合條件的。
語法格式:
select
字段1,字段2,字段3…
from
表名
where
條件; - 都有哪些條件?
①= 等于
查詢薪資等于800的員工姓名和編號?
select empno,ename from emp where sal = 800;
查詢SMITH的編號和薪資?
select empno,sal from emp where ename = ‘SMITH’; //字符串使用單引號
②<>或!= 不等于
查詢薪資不等于800的員工姓名和編號?
select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800; // 小于號和大于號組成的不等號
③< 小于
查詢薪資小于2000的員工姓名和編號?
select empno,ename,sal from emp where sal < 2000;
④<= 小于等于
查詢薪資小于等于3000的員工姓名和編號?
select empno,ename,sal from emp where sal <= 3000;
⑤> 大于
查詢薪資大于3000的員工姓名和編號?
select empno,ename,sal from emp where sal > 3000;
⑥>= 大于等于
查詢薪資大于等于3000的員工姓名和編號?
select empno,ename,sal from emp where sal >= 3000;
⑦between … and …. 兩個值之間, 等同于 >= and <=
查詢薪資在2450和3000之間的員工信息?包括2450和3000
第一種方式:>= and <= (and是并且的意思。)
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
第二種方式:between … and …
select
empno,ename,sal
from
emp
where
sal between 2450 and 3000;
注意:
使用between and的時候,必須遵循左小右大。
between and是閉區間,包括兩端的值。
⑧is null 為 null(is not null 不為空)
查詢哪些員工的津貼/補助為null?
select empno,ename,sal,comm from emp where comm is null;
注意:在數據庫當中null不能使用等號進行衡量。需要使用is null
因為數據庫中的null代表什么也沒有,它不是一個值,所以不能使用
等號衡量。
⑨and 并且
查詢工作崗位是MANAGER并且工資大于2500的員工信息?
select
empno,ename,job,sal
from
emp
where
job = ‘MANAGER’ and sal > 2500;
⑩or 或者
查詢工作崗位是MANAGER和SALESMAN的員工?
第一種:
select empno,ename,job from emp where job = ‘MANAGER’;
select empno,ename,job from emp where job = ‘SALESMAN’;
第二種
select
empno,ename,job
from
emp
where
job = ‘MANAGER’ or job = ‘SALESMAN’;
注意:and優先級比or高。 and和or同時出現,and優先級較高。如果想讓or先執行,需要加“小括號”
以后在開發中,如果不確定優先級,就加小括號就行了。
11.in(…) 包含,相當于多個 or (not in(…) 不在這個范圍中)
12.not 可以取非,主要用在 is 或 in 中
is null
is not null
in
not in
13. like 稱為模糊查詢,支持%或下劃線匹配,%匹配任意多個字符,下劃線:任意一個字符。(%是一個特殊的符號,_ 也是一個特殊符號)
例如:找出名字中含有O的?-》select ename from emp where ename like ‘%O%’;
找出名字以T結尾的?-》select ename from emp where ename like ‘%T’;
找出名字以K開始的?->select ename from emp where ename like ‘K%’;
找出第二個字每是A的?->select ename from emp where ename like ‘_A%’;
8.排序
1.查詢所有員工薪資,排序?
select
ename,sal
from
emp
order by
sal; // 默認是升序!!!
2.怎么降序?
指定降序:
select
ename,sal
from
emp
order by
sal desc;
3.指定升序?(默認就是升序)
select
ename,sal
from
emp
order by
sal asc;
4.可以兩個字段排序嗎?或者說按照多個字段排序?
查詢員工名字和薪資,要求按照薪資升序,如果薪資一樣的話,
再按照名字升序排列。
select
ename,sal
from
emp
order by
sal asc, ename asc; // sal在前,起主導,只有sal相等的時候,才會考慮啟用ename排序。
5.根據字段的位置也可以排序
select ename,sal from emp order by 2; // 2表示第二列。第二列是sal
按照查詢結果的第2列sal排序。
6.關鍵字順序不能變:
select
…
from
…
where
…
order by
…
以上語句的執行順序必須掌握:(***很重要)
第一步:from
第二步:where
第三步:select
第四步:order by(排序總是在最后執行!)
9.數據處理函數
數據處理函數又被稱為單行處理函數。單行處理函數的特點:一個輸入對應一個輸出。和單行處理函數相對的是:多行處理函數。(多行處理函數特點:多個輸入,對應1個輸出!)
單行處理函數常見的有哪些?
- lower 轉換小寫-》select lower(ename) as ename from emp;
- upper 轉換大寫-》select upper(name) as name from t_student;
- substr 取子串(substr( 被截取的字符串, 起始下標,截取的長度))-》select substr(ename, 1, 1) as ename from emp;
注意:起始下標從1開始,沒有0
例如:找出員工名字第一個字母是A的員工信息?
第一種方式:模糊查詢
select ename from emp where ename like ‘A%’;
第二種方式:substr函數
select
ename
from
emp
where
substr(ename,1,1) = ‘A’; - concat函數進行字符串的拼接-》select concat(empno,ename) from emp;
- length 取長度-》select length(ename) enamelength from emp;
- trim 去空格-》select * from emp where ename = trim(’ KING’);會自動把字符串里的空格給去掉
- 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, 2 ) as result from emp; //保留兩位小數并進行四舍五入。
select round(1236.567, 0) as result from emp; //保留整數位。
select round(1236.567, -1) as result from emp; // 保留到個位。(即個位應該都為0)
select round(1236.567, -2) as result from emp;// 保留到十位。(即個位/十位都應該為0) - rand() 生成隨機數(生成0-1之間的小數) -》select round(rand()*100,0) from emp; // 100以內的隨機數
10.ifnull 可以將 null 轉換成一個具體值-》ifnull是空處理函數。專門處理空的。
在所有數據庫當中,只要有NULL參與的數學運算,最終結果就是NULL。
select ename, sal + comm as salcomm from emp; 當有null時,結果均為null
select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp; 補助為NULL的時候,將補助當做0
小練習:首字母大寫? -》select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
10.分組函數(多行處理函數)
多行處理函數的特點:輸入多行,最終輸出一行
5個:
count 計數
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分組函數在使用的時候必須先進行分組,然后才能用。(很重要)
如果你沒有對數據進行分組,整張表默認為一組。
- 找出最高工資?-》select max(sal) from emp;
- 找出最低工資?-》select min(sal) from emp;
- 計算工資和:=》select sum(sal) from emp;
- 計算平均工資:-》select avg(sal) from emp;
- 計算員工數量?-》select count(ename) from emp;
分組函數在使用的時候需要注意哪些?
- 分組函數自動忽略NULL,你不需要提前對NULL進行處理。
- 分組函數中count()和count(具體字段)有什么區別?
count(具體字段):表示統計該字段下所有不為NULL的元素的總數。
count():統計表當中的總行數。(只要有一行數據count則++)。因為每一行記錄不可能都為NULL,一行數據中有一列不為NULL,則這行數據就是有效的。 - 分組函數不能夠直接使用在where子句中。(很重要) 學完分組查詢(group by)之后就明白了了。
- 所有的分組函數可以組合起來一起用。
例如:select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;