mysql數據庫的操作
查看數據庫狀態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數據庫的操作