概念:mysql
數據庫(DataBase,DB):指長期保存在計算機的存儲設備上,按照必定規則組織起來,能夠被各類用戶或應用共享的數據集合。(文件系統)sql
數據庫:存儲、維護和管理數據的集合。數據庫
登錄:安全
mysq -u root -p 123函數
sql分類:spa
DDL**(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等;對象
CREATE、 ALTER、DROPblog
create tables mydb1;排序
show tables;ip
alter tables mydb1 character set utf8;
drop tables mydb1;
use mydb1;
create table 表名(
字段1 字段類型,
字段2 字段類型,
...
字段n 字段類型
);
經常使用數據類型:
int:整型
double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;
char:固定長度字符串類型; char(10) 'abc '
varchar:可變長度字符串類型;varchar(10) 'abc'
text:字符串類型;
blob:字節類型;
date:日期類型,格式爲:yyyy-MM-dd;
time:時間類型,格式爲:hh:mm:ss
timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss 會自動賦值
datetime:日期時間類型 yyyy-MM-dd hh:mm:ss
DML***(Data Manipulation Language):數據操做語言,用來定義數據庫記錄(數據);
INSERT、 UPDATE、 DELETE
查詢表中的全部數據
SELECT * FROM 表名;
DML是對表中的數據進行增、刪、改的操做。不要與DDL混淆了。
INSERT 、UPDATE、 DELETE
小知識:
在mysql中,字符串類型和日期類型都要用單引號括起來。'tom' '2015-09-04'
空值:null
insert into emp(id,name,age) values(1,'zhangsan',18);
updata mydb1 set name='zhangsan' age=18 where name='zhangsan';
updata emp set salary=salary+500 where name='zahgnsan';
delete from emp where name='zhangsan';
DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別;
DQL*****(Data Query Language):數據查詢語言,用來查詢記錄(數據)。
SELECT
* 注意:sql語句以;結尾
DQL數據查詢語言 (重要)
數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端。
查詢返回的結果集是一張虛擬表。
語法:
SELECT selection_list /*要查詢的列名稱*/
FROM table_list /*要查詢的表名稱*/
WHERE condition /*行條件*/
GROUP BY grouping_columns /*對結果分組*/
HAVING condition /*分組後的行條件*/
ORDER BY sorting_columns /*對結果分組*/
LIMIT offset_start, row_count /*結果限定*/
create tables stu(
sid int,
sname var(50),
sage int
);
insert into stu (sid,sname,sage) values(1,'tom',23);
基礎查詢
1.查詢全部信息:
select * from stu;
2.查詢指定列
select sid sname from stu;
條件查詢
select * from stu where age>50 and gender='female';
select * from stu where sname='lisi' or sid='1001;
select * from stu where sid IN(1001,1002,1004);
select * from stu where sid NOTIN(1001,1002,1004);
select * from stu where sname is null;
模糊查詢
當想查詢姓名中包含a字母的學生時就須要使用模糊查詢了。模糊查詢須要使用關鍵字LIKE。
通配符:
_ 任意一個字符
%:任意0~n個字符
'%張%' '張_'
select * from stu where sname like '%li%';
字段控制查詢
1.去除重複記錄
seletc distinct salary from emp;
2.查看僱員的月薪與佣金之和
select *,sal+ifnull(comm,0) from emp;
3.給列名添加別名
select *,sal+ifnull(comm,0) total from emp;
排序 order by 列名 asc(默認) desc
1.查詢全部學生記錄,按年齡升序排序
select * from stu order by age;
2.查詢全部學生記錄,按年齡降序排序
select * from stu
3.查詢全部學生記錄,按年齡降序排序
select * from stu order by age desc;
4.查詢全部僱員,按月薪降序排序,若是月薪相同時,按編號升序排序
select * from emp order by sal desc ,empo asc;
聚合函數sum avg max min count
聚合函數是用來作縱向運算的函數:
1.查詢emp表中月薪大於2500的人數:
select count(*) from emp where sal>2500;
2.統計月薪與佣金之和大於2500元的人數:
select count(*) as cnt from emp where sal+ifnull(comm,0)>2500;
3.查詢有佣金的人數,有領導的人數:
select count(sal),count(manager) from emp;
4.查詢全部僱員月薪和:
select sum(sal) from emp;
5.查詢全部僱員月薪和,以及全部僱員佣金和:
select sum(sal),sum(comm) from emp;
6.查詢全部僱員月薪和,以及全部僱員佣金和:
select sum(sal+ifnull(comm,0)) from emp;
7.統計全部員工平均工資:
select avg(sal) from emp;
8.查詢最高工資和最低工資:
select max(sal),min(sal) from emp;
分組查詢
1.查詢每一個部門的部門編號和每一個部門的工資和:
select deptno,sum(sal) from emp group by deptno;
2.查詢每一個部門的部門編號以及每一個部門的人數:
select deptno,count(*) from emp group by deptno;
3.查詢每一個部門的部門編號以及每一個部門工資大於1500的人數:
select deptno,count(*) from emp where sal>2500 group by deptno;
注:having與where的區別:
1.having是在分組後對數據進行過濾.
where是在分組前對數據進行過濾
2.having後面能夠使用聚合函數(統計函數)
where後面不能夠使用聚合函數。
WHERE是對分組前記錄的條件,若是某行記錄沒有知足WHERE子句的條件,那麼這行記錄不會參加分組;而HAVING是對分組後數據的約束。
查詢工資總和大於9000的部門編號以及工資和:
select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
LIMIT 方言
LIMIT用來限定查詢結果的起始行,以及總行數。
注意,起始行從0開始,即第一行開始!
8.1 查詢5行記錄,起始行從0開始
SELECT * FROM emp LIMIT 0, 5;
注意,起始行從0開始,即第一行開始!
8.2 查詢10行記錄,起始行從3開始
SELECT * FROM emp LIMIT 3, 10;
8.3 分頁查詢
若是一頁記錄爲10條,但願查看第3頁記錄應該怎麼查呢?
8.3 查詢代碼的書寫順序和執行順序
查詢語句書寫順序:select – from- where- group by- having- order by-limit
查詢語句執行順序:from - where -group by - having - select - order by-limit