10)-MySQL數據庫基礎練習(答案版)
阿新 • • 發佈:2018-12-14
pri prim num select 的區別 連接 limit varchar alt
數據庫操作
1:// 查看mysql是否啟動
service mysql status
2:// 啟動mysql服務
service mysql start
3:// 重啟mysql服務
service mysql restart
4:// 停止mysql服務
service mysql stop
5:// 連接Mysql
mysql -u root -p
6:// 創建數據庫book
create database book
7:// 查看所有數據庫
show databases
8:// 刪除數據庫book
drop database book
9:// 選擇數據庫book
use book
表操作
10:// 創建一個數據庫表city,創建表字段city_id為自增主鍵,其余city_name、city_body、city_email為varchar類型、其中,city_name不能為空,其余信息補充完整 #創建表
create table city (
city_id int not null auto_increment,
city_name varchar(100) not null,
city_body varchar(100),
city_email varchar(100),
primary key (city_id)
)engine=innodb default charset=utf8;
11://在city表中添加一個city_date字段,要求字段類型date,並且不能為空 #添加字段
alter table city
add city_date date not null;
12:// 刪除city表中的city_date字段 #刪除字段
alter table city
drop column city_date;
13://修改city表名稱為new_city #修改表名
alter table city
rename new_city;
14://修改字段名
alter table student
change 舊字段名 新字段名 類型;
數據查詢
15:// 查詢book表中book_id,book_name列 #查詢多個列
select book_id,book_name from book;
16://查詢book表中所有列 #查詢所有列
select * from book;
17://查詢book表的前15行數據 #查詢行數
select * from book limit 15;
18://查詢book表的第15行數據 #查詢指定行數
select * from book limit 14,14;
19://查詢book表中book_name字段內容,並去重查詢 #去重查詢
select distinct book_name from book;
20://按book表中book_name進行正序排序 #按字段排序(正序)
select * from book order by book_name;
21://在book表中,先按book_id倒敘排序,再按book_name正序排序; #倒敘,多個字段排序
select * from book
order by book_id DESC,book_name;
22://在book表中,查詢book_id等於3的學生,並僅返回學生姓名book_name字段 #條件查詢
select book_id,book_name from book
where book_id=3;
23://在book表中,查詢所有book_email是空的列表數據 #篩選為null的數據
select * from book
where book_email is null;
24://在book表中,查詢book_id大於10並且book_name為‘test’的數據; #組合條件查詢
select * from book
where book_id > 10 and book_name=‘test‘;
25://在book表中,查詢book_id不等於3或者不等於5的數據 #組合條件查詢
select * from book
where book_id != 3 or book_id != 5;
26://查詢book表中,book_id_不等於3和等於4的所有數據,使用in #in操作符使用
select * from book
where book_id not in (3,4);
27://查詢book表中,book_name字段中,所有以‘小‘字開頭的書; #通配符使用
select * from book
where book_name like ‘小%‘;
28://計算某列的平均值 #聚合函數:計算平均值
select avg(number) from score
where student_id=1
28補充://去重後,進行某列平均值計算 #去重計算平均值
select avg(distinct sname) from student;
29://返回某列的行數 #聚合函數:返回某列行數
select count(sname) from student;
30://返回列表中所有的行數 #聚合函數:返回所有行數
select count(*) from student;
31://返回某列的最大值 #聚合函數:返回列中最大值
select max(sname) from student;
32://返回某列的最小值 #聚合函數:返回列中最小值
select min(sname) from student;
33://返回某列值得和 #聚合函數:返回列值的和
select sum(sname) from student;
34://組合使用聚合函數 #聚合函數組合使用
select count(*) as count_number,
avg(number) as avg_number,
max(number) as max_number,
min(number) as min_number,
sum(number) as sum_number
from score;
35://分組查詢
select vend_id, count(*) as num_prods
from products
group by vend_id;
36://分組查詢,增加查詢條件
select cust_id, count(*) as orders
from orders
group by cust_id
having count(*) >= 2;
目前為止所學過的所有類型的where子句都可以用having來替代。唯一的差別是where過濾行,而having過濾分組。
這裏有另一種理解方法,where在數據分組前進行過濾,having在數據分組後進行過濾。這是一個重要的區別,where排除的行不包括在分組中。
37://分組排序
select order_num, sum(quantity*item_price) as ordertotal
from orderitems
group by order_num
having sum(quantity*item_price) >= 50
order by ordertotal;
38://子查詢
select cust_name, cust_contact
from customers
where cust_id in (select cust_id
from orders
where order_num in (select order_num
from orderitems
where prod_id = ‘tnt2‘));
可以把一條select語句返回的結果用於另一條select語句的where子句。
39://多表聯合查詢及創建聯結
select vend_name, prod_name, prod_price
from vendors, products
where vendors.vend_id = products.vend_id
order by vend_name, prod_name;
SELECT語句與前面所有語句一樣指定要檢索的列。這裏,最大的差別是所指定的兩個列(prod_name和prod_price)在一個表中,而另一個列(vend_name)在另一個表中。
現在來看FROM子句。與以前的SELECT語句不一樣,這條語句的FROM子句列出了兩個表,分別是vendors和products。它們就是這條SELECT語句聯結的兩個表的名字。這兩個表用WHERE子句正確聯結,WHERE子句指示MySQL匹配vendors表中的vend_id和products表中的vend_id。
可以看到要匹配的兩個列以vendors.vend_id和products.vend_id指定。這裏需要這種完全限定列名,因為如果只給出vend_id,則MySQL不知道指的是哪一個(它們有兩個,每個表中一個)。
40://聯合多個表查詢
select prod_name, vend_name, prod_price, quantity
from orderitems, products, vendors
where products.vend_id = vendors.vend_id
and orderitems.prod_id = products.prod_id
and order_num = 20005;
只用於單個列 AVG()只能用來確定特定數值列的平均值,而且列名必須作為函數參數給出。為了獲得多個列的平均值,必須使用多個AVG()函數。
10)-MySQL數據庫基礎練習(答案版)