码迷,mamicode.com
首页 > 其他好文 > 详细

mysq 学习四 多表查询

时间:2016-11-04 02:23:41      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:数据库多表查询 交叉连接 内连接 外连接

多表的查询

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 学习四 多表查询

标签:数据库多表查询 交叉连接 内连接 外连接

原文地址:http://7298246.blog.51cto.com/7288246/1869149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!