1. 程式人生 > >mysql數據庫的操作

mysql數據庫的操作

inf 外鍵 數字 重復 第三天 const fault 條件 var

查看數據庫狀態Sudo service mysql status

啟動Sudo service mysql start

停止Sudo service mysql stop

重啟Sudo service mysql restart

進入mysql 的方法:進入本地的mysql:mysql -uroot -p; 進入其他的mysql: mysql -h -P3306 -uroot -pmysql

展示數據庫:show databases

創建數據庫:create database 數據庫名 character set utf8

展示數據庫的創建過程:show create database 數據庫名

刪除數據庫: drop database 數據庫名

選擇數據庫:use database

查看當前所在的數據庫;select database()

展示數據庫的表:show tables

刪除表:drop table 表名

創建表: create table 表名()

1、所有列都插入值

語法:insert into table values(v1,v2,v3….)

特點:列值同數,列值同序

2、為指定列插入值

語法:insert into table(col1,col2,col3) values(v1,v2,v3) 給一個列插入值就用value

特點:指定順序,列值對應

3、一次性插入多條記錄

語法:insert into table(co1,col2,col3…)values

(v1,v2,v3),

(v1,v2,v3),

(v1,v3,v3)…..

查看表的信息:desc 表名

查看整個表的信息:select * from 表名

查看指定的列:select 列名1,列名2 from 表名

查看列起別名:elect 列名1 as 名字1,列名2 as 名字2 from 表名

去除列的重復數據:select distinct 列名 from 表名

數據庫的導出:

mysqldump -uroot -p 數據庫 > /home/python/Desktop/(路徑)zuoyadaochu(直接在終端輸入)

數據庫的導入:先創建空的數據庫並選中,

source /home/python/Desktop/(路徑)zuoyadaochu(名字);

修改數據:

修改制定數據:update TblTeacher set tTname=‘孫悟空‘ where tTld=7;

修改全部數據:update TblTeacher set tTname=‘孫悟空‘

刪除數據:

delete from TblTeacher(表名) where tTld=5(不加where 刪除整個表)

Update test set is_del=1 where name=張三

約束介紹

主鍵約束:create table tab_PK( id int unsigned(無符號) primary key auto_increment(自動增長), name varchar(30));

唯一約束:create table UQ(

-> id int unsigned primary key auto_increment,

-> name varchar(10) unique); unique代表不能重復的

非空約束:not null

默認約束:not null default()

檢查約束:check(age>0 and age<100) (檢查約束在mysql中不起作用)

外鍵約束:先創建主鍵的表,再創建外鍵的表,額刪除的話先刪除外鍵的,再刪除主鍵的

foreign key(id)(外鍵) references class(id)(主鍵)

對列進行增刪改查:

查詢一列:select 列名 from 表名

增加一列:alter table tablename add 列名 數據類型

刪除一列:alter table tablename drop column 列名

修改列的數據類型:alter table tablename modify 列名 數據類型

修改列的數據類型並改名:alter table tablename change old_colname new_colname 數據類型

(alter table teacher change ttname name varchar(10))

填加約束:tablename表名 con_name約束的名字 col_name列名

填加主鍵約束:alter table table_name add constraint con_name primary key(col_name)

填加外鍵約束:alter table table_name add constraint con_name foreign key(col_name) references table(col_name)

填加檢查約束:alter table table_name add constraint con_name check(expression)

填加默認約束::alter table table_name modify col_name default value

填加自動增長:alter table table_name modify column col_name type auto_increment

填加非空約束:alter table table_name modify 列名 數據類型 not null

填加唯一約束:alter table table_name add constraint con_name unique(列名)

條件查詢:

1、查詢學生表中所有年紀大於18歲的同學的個人信息

select * from t_student where c_age > 18

2、查詢學生表所有年紀小於80歲的同學的姓名、性別、身份證號

select c_name as ‘姓名‘,c_gender as ‘性別‘,c_cardid as ‘身份證號‘ from t_student

where c_age < 80

3、查詢所有男同學的信息

select * from t_student where c_gender = ‘男‘

4、查詢所有年齡大於30歲,並且性別為男的同學的個人信息

select * from t_student where c_age >30 and c_gender =‘男‘

5、查詢所有年齡大於30歲,或者性別為男的同學的個人信息

select * from t_student where c_age >30 or c_gender =‘男‘

6、查詢所有年齡在20歲以下(包含20歲),並且性別為女的同學的個人信息

select * from t_student where c_age <=20 and c_gender = ‘女‘

模糊查詢:

1、查詢年齡在18-80歲之間所有學生的信息。(2種寫法 and&between)

select * from t_student where c_age >=18 and c_age <=80

select * from t_student where c_age between 18 and 80

2、查詢年齡不在18-80歲之間所有學生的信息。(2種寫法,not ,between)

select * from t_student where not (c_age >=18 and c_age <=80)

select * from t_student where c_age not between 18 and 80

3、查詢年齡為18和28和38學生的信息。(or and in )

select * from t_student where c_age not in (18,28,38)

4、查詢年齡不是18、28、38的學生信息(2種寫法 !=,not in )

select * from t_student where not ( c_age = 18 or c_age =28 or c_age =38)

使用通配符進行模糊查詢

1、查詢所有姓孫的同學

select * from t_student where c_name like ‘孫%‘

2、查詢所有姓名以‘娘‘結尾的同學

select * from t_student where c_name like ‘%娘‘

3、查詢所有姓名中包含‘二’和三’的同學信息

select * from t_student where c_name like ‘%二%‘ or c_name like ‘%三%‘

4、查詢所有姓孫並且名字一共只有兩個字的同學

select * from t_student where c_name like ‘孫_‘

5、查詢名字一共是兩個字的同學信息

select * from t_student where c_name like ‘__‘

6.null處理

查詢數學成績為null的信息:

select * from t_student where c_math is null (is not null)

Order by 排序 order by asc/desc

1、查詢所有學員的信息,並將結果按照年齡降序排列

select * from t_student order by c_age desc

2、查詢所有學員的姓名和年紀,並將結果按照年齡降序排列

Select c_name,c_age from t_student order by c_age desc;

3、查詢t_score表,將成績按照英語成績降序排列

select * from t_score order by c_english desc

4、查詢t_score表,將成績按照英語成績降序排列,並且按照數學成績升序排列

select *from t_score order by c_english desc,c_math asc

例子:

# 數據第三天

## **1、數據分組**

### 1、將學生表按照性別分組(列名只能寫性別)

1、如果根據某一列進行分組,那麽,select 後面跟的類名必須是分組的列名。

如果說,select 後面想查詢分組列名之外的其他列,其他列需要放到函數中。

2、group_concat(列名)能夠查詢分組後的信息

### 2、查看每組學生姓名

select c_gender,group_concat(c_name) from t_student group by c_gender;

## **2、聚合函數**

### 1、獲取班級總人數

select count(*) from t_student

### 2、獲取班級男生總人數和女生總人數

select c_gender,count(*) from t_student group by c_gender

### 3、獲取t_score表中的數學平均成績、英語平均成績

select avg(c_math) as ‘數學平均成績‘,avg(c_english) as ‘英語平均成績‘ from t_score

### 4、註意null值問題

聚合函數不計算null值

### 5、獲取t_score中英語成績最高分

select max(c_english) from t_score

### 6、獲取t_score中英語成績最低分

select min(c_english) from t_score

### 7、round保留指定位數小數

round("數字",保留的位數)

## **3、分組聚合函數**

### 1、獲取學生表中男同學和女同學的個數

### 2、從學生表中查詢出每個班級的班級ID,和班級中男同學的個數

select c_class_id ,count(*) from t_student where c_gender =‘男‘ group by c_class_id

### 3、從學生表中查詢出每個班級的班級ID,班級總人數,以及該班級的平均年齡

select c_class_id as ‘班級ID’,count(*) as ‘班級總人數‘,round(avg(c_age),2) as ‘平均年齡‘ from t_student group by c_class_id

### 4、查詢班級人數超過三個人的班級

1、求出每個班級的人數

? 根據班級分組

? 獲取每個班級的人數

? where 班級人數 > 三

select c_class_id,count(*) from t_student where count( * ) > 3 group by c_class_id

### 5、在學生表中,按照性別分組,查詢平均年齡超過40歲的分組和每組的姓名

create table order_info( id int unsigned primary key auto_increment not null, 商品名稱 varchar(30), 商品編號 varchar(30), 銷售數量 int, 銷售價格 float, 購買人 varchar(30), 銷售日期 date, 銷售員 varchar(30));

insert into order_info values(0,‘可口可樂‘,‘100101‘,3,36,‘第一百貨商店‘,‘2018-01-01‘,‘王大錘‘)

,(0,‘康師傅方便面‘,‘110101‘,2,24,‘愛民商場‘,‘2018-01-03‘,‘王大錘‘),

(0,‘娃哈哈礦泉水‘,‘100201‘,4,18,‘萬發超市‘,‘2018-01-03‘,‘王大錘‘),

(0,‘樂百氏果凍‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘王大錘‘),

(0,‘青島啤酒‘,‘100301‘,3,30,‘第一百貨‘,‘2018-01-04‘,‘王大錘‘),

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小區批發部‘,‘2018-01-03‘,‘李狗蛋兒‘),

(0,‘康師傅方便面‘‘,‘110101‘,4,25,‘萬發超市‘,‘2018-01-03‘,‘李狗蛋兒‘),

(0,‘樂百氏果凍‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘李狗蛋兒‘),

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘愛民商場‘,‘2018-01-09‘,‘李狗蛋兒‘),

(0,‘康師傅方便面‘,‘110101‘,2,24,‘愛民商場‘,‘2018-01-03‘,‘王剛蛋‘),

(0,‘娃哈哈礦泉水‘,‘100201‘,4,18,‘萬發超市‘,‘2018-01-03‘,‘王剛蛋‘),

(0,‘樂百氏果凍‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘王剛蛋‘),

(0,‘青島啤酒‘,‘100301‘,3,30,‘第一百貨‘,‘2018-01-04‘,‘王剛蛋‘),

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小區批發部‘,‘2018-01-03‘,‘王剛蛋‘),

(0,‘康師傅方便面‘‘,‘110101‘,4,25,‘萬發超市‘,‘2018-01-03‘,‘王剛蛋‘),

(0,‘樂百氏果凍‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘王剛蛋‘),

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘愛民商場‘,‘2018-01-09‘,‘王剛蛋‘),

(0,‘傻子瓜子‘,‘120101‘,4,25,‘光明小區批發部‘,‘2018-01-03‘,‘老鐵‘),

(0,‘康師傅方便面‘‘,‘110101‘,4,25,‘萬發超市‘,‘2018-01-03‘,‘老鐵‘),

(0,‘樂百氏果凍‘‘,‘140101‘,2,30,‘一中超市‘,‘2018-01-08‘,‘老鐵‘),

(0,‘傻子瓜子‘‘,‘120101‘,2,30,‘愛民商場‘,‘2018-01-09‘,‘老鐵‘),

(0,‘康師傅方便面‘,‘110101‘,2,24,‘愛民商場‘,‘2018-01-03‘,‘老鐵‘),

(0,‘娃哈哈礦泉水‘,‘100201‘,4,18,‘萬發超市‘,‘2018-01-03‘,‘老鐵‘),

(0,‘樂百氏果凍‘,‘140101‘,5,12,‘一中超市‘,‘2018-01-04‘,‘老鐵‘)

## **4、綜合練習**

綜合練習:

order_info表

### 1、 熱銷售商品排名表【即按照每種商品的總銷售數量排序】

Select 商品名稱,sum(銷售數量) from order_info group by 商品名稱 order by sum(銷售數量) desc

### 2、 請統計銷售總結超過400元的商品名稱和銷售總價,並按照銷售總價降序排列

select 商品名稱,sum(銷售數量*銷售價格) as ‘銷售總價‘ from order_info group by 商品名稱 having sum(銷售數量 * 銷售價格) >400 order by 銷售總價 desc

### 3、 統計各個銷售對“樂百氏果凍”的銷售數量

Select 銷售員,sum(銷售數量) from order_info where 商品名稱=‘樂百氏果凍‘ group by 銷售員

order by sum(銷售數量) desc

## **5、Limit關鍵字的使用**

### 1、在學生表中,查詢出前5個數據

select * from t_student limit 0,5

### 2、在學生表中,查詢出第三條到第十條數據

select * from t_student limit 2,8

### 3、在學生表中,限制查詢出來的男性信息個數為2

select * from t_student where c_gender = ‘男‘ limit 2

### 4、在學生表中,每頁顯示5條數據,顯示第一頁

select * from t_student limit 0,5

### 5、在學生表中,每頁顯示5條數據,顯示第二頁

select * from t_student limit5,5

### 6、在學生表中,每頁顯示5條數據,顯示第三頁

select * from t_student limit10,5

### 7、在學生表中,每頁顯示5條數據,顯示第四頁

select * from t_student limit15,5

### **分頁結論:**

m=(當前的頁碼-1)*n

n=顯示的條數

#### 8、在學生表中,查詢女生信息,根據年齡從高到底排序,並且只顯示前兩條數據

select * from t_student where c_gender =‘女‘ order by c_age desc limit 2

## **6、內連接、左連接、右連接**

### 1、查詢t_student 表和t_class表中的信息(內連接)

select * from t_student as a inner join t_class as b on a.c_class_id = b.c_id

### 2、查詢參加考試學員的姓名、性別、英語成績、數學成績

select a.c_name,a.c_gender,b.c_english,b.c_math from t_student as a inner join t_score as b on a.c_id = b.c_student_id(多表查詢

#### 查詢 沒有參加考試學員的成績。

select a.c_name,a.c_gender from t_student as a left join t_score as b on a.c_id = b.c_student_id where c_english is null and c_math is null;

### 3、查詢所有學員的姓名、性別、英語成績、數學成績

select a.c_name,a._gender,b.c_english,b.c_math from t_student as a left join t_class as b on a.c_id =b.c_student_id

###

### 6、查詢孫悟空、豬八戒、沙和尚的英語成績和數學成績

select a.c_name,b.c_math,b.c_english from t_student as a inner join t_score as b on a.c_id = b.c_student_id

where a.c_name in (‘豬八戒‘,‘孫悟空‘,‘沙和尚‘)

## 7、自關聯

### 1、成績表自關聯

select * from t_score as a inner join score as b on a.c_student_id = b.c_student_id

### 2、查詢所有的省份

select * from areas where pid is null;

### 3、查詢出河北省有哪些城市

select city.atitle from areas as province inner join areas as city on province.aid = city.pid where province.atitle = ‘河北省‘;

### 4、查詢滄州市下有哪些區縣

## 8、子查詢

### 1、請查詢軟件工程18級一班的所有學生信息

select * from t_student where c_class_id = (select c_id from t_class where c_name = ‘軟件工程18級一班‘);

### 2、請查詢軟件工程18級一班的所有學生信息,使用相關子查詢實現

select * from t_student as ts where exists(select * from t_class as tc where ts.c_class_id = tc.c_id and tc.c_name =‘軟件工程18級一班‘ );

# 不要記 也不要 寫

### 3、查詢軟件工程18級一班和軟件工程18級二班的學生信息

select * from t_student where c_class_id in (select c_id from t_class where c_name in ( ‘軟件工程18級一班‘,‘軟件工程18級二班‘);

### 4、查詢孫悟空、豬八戒、沙和尚的英語和數學成績

select * from t_score where c_student_id in (select c_id from t_student where c_name in (‘孫悟空‘,‘沙和尚‘,‘豬八戒‘));

### 5、請查詢出那些沒有參加過考試的同學的id,姓名,和年齡(子查詢)

? select c_id,c_name,c_age from t_student where c_id not in (select c_student_id from t_score)

## 9、SQL演練

#### 京東

SQL習題:

1. 查詢類型cate_name為 ‘超極本‘ 的商品名稱、價格

select brand_name,price from goods where cate_name = ‘超極本‘

1. 顯示商品的種類

Select cate_name from goods group by cate_name

1. 求所有電腦產品的平均價格,並且保留兩位小數

select round(avg(price),2) from goods

1. 顯示每種品牌商品的平均價格

select brand_name, round(avg(price),2) from goods group by brand_name;

1. 查詢每種類型的商品中 最貴、最便宜、平均價、數量

select max(price),min(price),avg(price),count(*),cate_name from goods group by cate_name;

2. 查詢所有價格大於平均價格的商品,並且按價格降序排序

select * from goods where price > (select avg(price) from goods) order by price desc;

1. 查詢每種類型中最貴的電腦信息

推薦這種:

select * from goods where price in (select max(price) from goods group by cate_name)

下面這種不推薦:

select * from goods as a inner join (select cate_name ,max(price) as max_price from goods) as b on a.cate_name=b.cate_name and a.price=b.max

創建“商品分類表”

事務:

索引:unique約束 primary key約束都是索引

mysql數據庫的操作