MySql知識點

#MySql操作

數據庫操作(增,刪,查)

show databases;                          //查看所有數據庫
create database 數據庫名稱;               //增加數據庫
drop database 數據庫名稱;                 //刪除數據庫
use 數據庫名稱                            //無分號, 選擇要操作的數據庫

數據庫表操作(增、刪、查)

在要操作某個數據庫中的表時,一定要先使用數據庫

use 數據庫名稱  //無分號

表操作

show tables;                                              //查看所有的表
select * from 表名;                                        //查看錶中的數據
create table 表名(字段名稱 字段類型);                       //添加一張數據庫中的表
create table 表名(字段名稱 字段類型,字段名稱 字段類型,...);  //添加一張數據庫中的表

舉例:

create table student(
       id int,
       name varchar(4),//varchar類型不能爲空
       sex varchar(2),
       age int,
       schooldate date,//date是時間類型
)

刪除一張表

drop table 表名;

數據庫表結構操作(增、刪、改、查)

查看錶結構

desc 表名;

對錶的結構進行修改

alter table 表名 add 字段名 字段類型;                   //增加字段
alter table 表名 add (字段名 字段類型,字段名 字段類型); //增加多個字段
alter table 表名 drop 字段名;                         //刪除字段
alter table 表名 modify 字段名 要修改之後的字段類型      //修改字段類型

舉例:

create table book(
    id int,
    name varchar(10),
    pressdate date,
    price double(5,2)//5位數,小數點後佔兩位,整數佔三位
)

數據庫表的數據操作(增、刪、改)

insert into 表名(字段名稱,字段名稱) values(對應的字段值,對應的字段值);//增加表中數據
insert into 表名 values(表中所有對應字段名稱的字段值);
delete from 表名;                                                 //清空表中數據
detete from 表名 where 判斷條件;                                   //刪除符合條件的數據
update 表名 set 字段名=新的字段值;                                  //修改表中對應字段名的所有的值
update 表名 set 字段名=新的字段值 where 判斷條件;                    //修改表中滿足判斷條件的對應字段名的值
update 表名 set 字段名=新的字段值,字段名=新的字段值 where 判斷條件;

MySql約束

約束在創建表時建立
唯一約束
unique

create table stu(number int unique ,name varchar(10));//number不可重複

可以創建兩個標號爲空的數據,因爲任何一個null都不等於另一個null

insert into stu(number, name) values(null,'tom');
insert into stu(number, name) values(null,'jim'); 

非空約束
not null

reate table stu(number int not null ,name varchar(10));//number不可爲空

同一個字段加多個約束
不需要逗號

create table stu(num int unique not null,name varchar(10));

主鍵約束
非空約束和唯一約束的組合稱爲主鍵約束
primary key

create table stu(num int primary key,name varchar);

一般數字類型主鍵配合主鍵自動增長策略
插入數據時只需要插入除主鍵之外的數據就行
auto_increment

create table stu(num int primary key auto_increment,name varchar(10));

外鍵約束
外鍵必須是另一張表中的主鍵
**foreign key(要設爲外鍵的字段名) refernces 另一張表名(另一張表中設爲主鍵的值)
**

create table class(num int primary key auto_increment,name varchar(10));
create table student(num int primary key auto_increment,name varchar(10),classnum int,foreign key(classnum) references class(num));

Mysql查詢

MySql基本查詢操作

查詢語句的格式

select [字段列表,表達式,函數] from 表名

改掉查詢之後的表名

select [字段列表,表達式,函數] '要改的名字' from 表名
select ename '姓名',sal '工資' from emp;

select 字段列表[字段1,字段2,字段n] from 表名

select ename,sal from emp;

select 表達式[算數表達式] from 表名

select ename,sal*12 from emp;

數據庫去重,distinct關鍵字

select distinct dept from emp;

MySql條件查詢

單條件查詢

where sal = 1600;
where sal = '1978/03/15';
where sal [>,<,<>] 1600;//工資大於,小於,不等於1600

多條件查詢
1.並且 and

select * from emp where sal > 1600 and ename = 'zzz';

2.或者 or

select * from emp where sal = 1600 or sal = 800 or sal = 950;//查找工資等於1600,800,950的記錄
select * from emp where sal in(1600,800,950);//等同上條
select * from emp where sal not in(1600,800,950)//查找工資不等於1600,800,950,的記錄

3.在哪個範圍內between and

select * from emp between 1600 and 3000;//查找工資水平在1600到3000之間的記錄 

4.空永遠不等於空
null和null做判斷,永遠爲false

//查找沒有福利的記錄
select * from emp where comm = null;//這是錯誤的寫法
select * from emp where comm is null;//這是正確的寫法
//查找有福利的記錄
select * from emp where comm is not null;

Mysql函數

1.數學函數

pi()           //返回pi的值(圓周率)
floor(x)       //去掉小數部分取整,sal爲23.56
   select floor(sal) from emp where ename = 'Tom';//查詢值爲23
ceiling(x)     //進一取整
   select ceiling(sal) from emp where ename = 'Tom';//查詢值爲24
round(x,y)    //以小數點後y位四捨五入,y爲負,則倒數y位變爲0,倒數y+1位四捨五入
truncate(x,y)  //保留小數點後y位,捨去y位往後的數值,y爲負,則倒數y位變爲0

2.聚合函數(分組函數)

avg(col)       //返回指定列的平均值
count(col)     //返回指定列中非null 值/列的個數(函數參數爲*時不忽略)
min(col)       //返回列中的最小值
max(col)       //返回列中的最大值
sum(col)       //返回列中的所有值之和

2.字符串函數

concat(s1,s2..sn)   //將s1,s2..sn連接成字符串
     select concat(ename,'的工資是:',sal) from emp;
ltrim(str)          //去掉字符串開頭空格
rtrim(str)           //去掉字符串末尾空格
trim(str)           //去掉字符串首尾空格
length(str)         //查詢字符串的長度
substring(x,y)      //截取字符串,從x開始的y個字符

3.日期和時間函數

4.條件判斷函數
5.系統信息函數
6.加密函數
7.格式化函數

Mysql分組函數


別名
可以給字段,表達式,函數,表起別名

//查看每個班級成績的平均值1.給每個成績分組2.計算每個組的平均值
select avg(achievement) '成績',classnum from student group by classnum;

不在分組函數中的字段 必須在group by的後面
當要在已命名分組函數中寫判斷條件時,不用where 用 having。

//查看平均值大於80的 班級成績的平均值1.給每個成績分組2.計算每個組的平均值3.計算平均值大於80的
select avg(achievement) '成績',classnum from student group by classnum having 成績 > 80;

Mysql子查詢

就是一個查詢的結果可以作爲另一個查詢的數據源或者條件

1.將查詢結果作爲另一個查詢的條件
查看成績最高的人的名字
將成績最高作爲篩選條件(一層組函數)

select name,achievement from student where achievement = (select max(achievement) from student);

2.將查詢結果作爲另一個查詢的數據源
查詢結果做表時,必須起別名
emp表

查詢平均工資最大的部門是哪個(兩層組函數)
組函數不能嵌套

select max(avg(sal)) deptno from emp group by deptno;//這是錯誤的

(1).查詢每個部門的平均工資,(2).查看最大平均工資的部門

//查詢最大的平均工資
select max(平均工資) from (select avg(sal) '平均工資',deptno from emp group by deptno) avg_table;
//查詢最大的平均工資的部門
select 平均工資 from (select avg(sal) '平均工資',deptno from emp group by deptno) avg_table 
where 平均工資 = (select max(平均工資) from (select avg(sal) '平均工資',deptno from emp group by deptno) avg_table);

Mysql多表查詢

dept表

1.查詢員工的姓名和員工所在部門的名稱

select ename,dname from emp,dept where emp.deptno = dept.deptno;
selece ename,dname from emp join dept on emp.deptno = dept.deptno;

salgrade表

2.查詢員工的姓名和員工所在部門的名稱及工資等級

select ename,dname,grade from emp join dept join salgrade on
emp.deptno = dept.deptno and emp.sal beween losal and hisal;

3.查詢員工的姓名和員工經理人的姓名
做單表的多表查詢

select e.ename,m.ename from emp e join emp m on e.empto = m.mar;

左外聯合:
join前加left:左邊表中如果存在記錄沒有匹配到還想顯示出來
右外聯合:
join前加right:右邊表中如果存在記錄沒有匹配到還想顯示出來

作業:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章