mysq 学习四 多表查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysq 学习四 多表查询相关的知识,希望对你有一定的参考价值。
多表的查询
1、连接查询
a、交叉连接:(cross in)
create table CUSTOMERS(
id int(11) NOT null auto_increment,
name varchar(100) default null,
city varchar(20) default null,
primary key (id)
);
在插入数据的时候如果出现了中文插不进去的时候,保错的提示信息
是varchar的长度不够的时候,但是我们又明显知道我们指定的
长度是够的时候
我们可以看看我们的编码格式
show variables like"character%";
然后设置我们的编码格式
通常设置
set character_set_client=gbk;
set character_set_results=gbk;
原因是我们的dos命名行下的编码格式是gbk;
insert into CUSTOMERS values(1,"张三","四川");
insert into CUSTOMERS values(2,"李四","重庆");
insert into CUSTOMERS values(3,"王五","广州");
insert into CUSTOMERS values(4,"孙六","湖北");
insert into CUSTOMERS values(5,"周七","上海");
然后创建orders表格
create table orders(
ID int(11) NOT NULL auto_increment,
order_number varchar(100) default NULL,
price float(8,2) default null,
customer_id int(11) default null,
primary key (ID),
key customer_id_fk (customer_id),
constraint customer_id_fk foreign key (customer_id) references CUSTOMERS(ID)
);
INSERT INTO `orders` VALUES (1,‘0001‘,100.00,1),(2,‘0002‘,200.00,1),(3,‘0003‘,300.00,1),(4,‘0004‘,100.00,2),(5,‘0005‘,200.00,3),(6,‘0006‘,100.00,4),(7,‘0007‘,1000.00,NULL);
select * from customers,orders;
select c.ID,c.NAME,o.ORDER_NUMBER,o.PRICE from CUSTOMERS c,ORDERS o;
查询结果如下:
共有35条记录。
b、内连接(inner join)
隐式内连接:
select * from CUSTOMERS c,ORDERS o where c.ID= o.CUSTOMER_ID;
显示内连接:(关键字inner join)
select * from CUSTOMERS c inner join ORDERS o on c.ID=o.CUSTOMER_id;
其中的关键字inner 可以省略,省略后如下:
select * from CUSTOMERS c join ORDERS o on c.ID=o.CUSTOMER_id;
查询结果如下:
c、外连接(outer join)
查看所有客户信息,同时有订单的显示订单的详细信息
左外连接:返回满足连接条件的记录,同时返回左表中剩余的其他记录。
select * from CUSTOMERS c left outer join ORDERS o on c.ID=o.CUSTOMER_ID;
查询结果如下:
查看所有订单信息,同时返回下单的客户信息
右外:返回满足连接条件的记录,同时返回右表中剩余的其他记录。
select * from CUSTOMERS c right outer join ORDERS o on c.ID = o.CUSTOMER_ID;
2、子查询
又称之为嵌套查询。查询中有查询。
执行顺序:先执行子查询(内查询),再执行外查询。
子查询:必须放在小括号之内。
查询“张三”的所有订单信息
形式一:多条查询语句
select ID from CUSTOMERS where NAME=‘张三‘;
select * from ORDERS where CUSTOMER_ID=1;
形式:subselect(子查询)
select * from ORDERS where CUSTOMER_ID=(select ID from CUSTOMERS where NAME=‘张三‘);
查询订单单价大于100的有哪些客户?
select * from CUSTOMERS where ID in (select CUSTOMER_ID from ORDERS where PRICE > 100);
3、mysql常用的函数
SUM():求和
COUNT():计数
AVG():求平均
MAX():求最大
MIN():求最小
统计有多少个客户
select count(*) from CUSTOMERS;
统计订单值大于300的订单
select count(*) from ORDERS where PRICE>=300;
4、分组(报表)查询:group by
对订单表中商品归类后,显示没一类商品的总价
对订单表中商品归类后,显示每一类商品的总价
select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT;
查询购买了几类商品,并且每类总价大于100的商品
select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT having sum(PRICE)>100;
5、数据库的备份和恢复
(1)、备份数据(表结构和数据)
c:\MySQL\bin\mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql
所以我在cmd下面执行:mysqldump -h localhost -p3306 -u root -p test5>d:/test5.sql就可以完成备份
(2)、恢复数据库中的数据
方式一:
由于刚才我已经删除了数据库
应该先创建数据库
create database test5;
然后:use test5;
最后:source d:test5.sql;
这样就可以完成数据库的恢复
方式二:
c:MySQL\bin\mysql -u root -p test6<d:/test5.sql
执行:mysql -u root -p test5<d:/test5.sql(注意没有“;”)
当然再执行之前也应该保证test5的数据库数存在的。
(3)、删除数据库
drop database test5;
(4)、查询tables
show tables;
本文出自 “学习笔记” 博客,请务必保留此出处http://7298246.blog.51cto.com/7288246/1869149
以上是关于mysq 学习四 多表查询的主要内容,如果未能解决你的问题,请参考以下文章