数据库操作

 

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

 

 只用于单个列 AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。

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;