博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL语句学习(二)
阅读量:5992 次
发布时间:2019-06-20

本文共 1926 字,大约阅读时间需要 6 分钟。

为一张表添加外键:

这里我们希望再建一张订单的表为t_order,包含order_id,customer_id和price:

1 CREATE TABLE t_order(order_id INT(11) NOT NULL auto_increment PRIMARY KEY,2 customer_id INT(11) NOT NULL,3 price DECIMAL(10,2)4 );

我们按照之前所学的建立了这张表,但是实际上,我们希望这张表和之前的表应该是有某种约束,因此我们就需要为这行表添加一个外键。

和添加主键的语法类似的,我们添加外键:

1 ALTER TABLE t_order ADD FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id);

或者,我们也可以在建立表的时候,直接设置外键:

CREATE TABLE t_order(order_id INT(11) NOT NULL auto_increment PRIMARY KEY,customer_id INT(11) NOT NULL,price DECIMAL(10,2),FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id));

注意:外键只是一个约束!

 

别名:

有时候名字太长,我们希望能用简写来代替之前的名字,这时候我们就可以设置别名(ALIAS),

我们可以为列设置别名:

1 SELECT First_name AS f_name, Last_name AS Family FROM t_customer;

我们在输出的结果中可以看到,列的名字已经发生了改变:

 

同样,我们可以设置表的别名:

1 SELECT t_c.customer_id FROM t_customer AS t_c;

乍一看,使用别名似乎更加费事了。但是,我们看下面的SQL语句:

1 SELECT t_order.order_id, t_order.price FROM t_order, t_customer WHERE t_customer.First_name = 'MeiMei';

注意,我们虽然没有直接从t_customer中查相关条件,但是FROM后面也要写上t_customer,这是因为我们将这两个做了笛卡尔积,然后在结果中再筛选。

我们再来看看更长的查询:

1 SELECT t_order.order_id, t_order.price, t_customer.customer_id FROM t_order, t_customer WHERE t_customer.First_name = 'MeiMei';

SQL语句里两张表的名字出现了很多次,我们再看看使用别名后的SQL语句:

SELECT o.order_id, o.price, c.customer_id FROM t_order AS o, t_customer AS C WHERE c.First_name = 'MeiMei';

是不是简洁了一些。

 

实际上,当我们需要联合查询两张表时,我们应该使用JOIN 将两张表联合起来。

1 SELECT * FROM t_order INNER JOIN t_customer ON t_customer.customer_id = t_order.customer_id;

INNER JOIN 就相当于JOIN,是两张表的交集,而OUTER JOIN还分为LEFT JOIN,RIGHT JOIN和FULL JOIN。LEFT JOIN左边的集合,当后边无该记录时,用NULL填充,而RIGHT JOIN是右边的集合,左边没有的记录用NULL填充。FULL JOIN是求并集,没有的记录用NULL填充。

 

UNION和UNION ALL可以用来合并两个查询的结果:

1 SELECT Last_name FROM t_customer UNION SELECT customer_id FROM t_order;

我们会得到一个以Last_name为列名的一个表,然后将前后两次的筛选记录都合并在内。这样的筛选并没有什么实际意义,只是用来练习语法。

当然我们可以筛选出多个列,但是前后两次筛选的列数必须相同,并且结果中总以第一次查询的列名表示。

UNION ALL会显示重复的记录,而UNOIN则不会。

 

转载于:https://www.cnblogs.com/insaneXs/p/5220818.html

你可能感兴趣的文章
CentOS6.5下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)...
查看>>
Vmware 设置NAT模式
查看>>
mvel2.0语法指南
查看>>
什么是pear的channel?
查看>>
javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
查看>>
idea 高级调试技巧
查看>>
[ZZ]新手学 appium-合集第一季度
查看>>
(六)SSO之CAS框架扩展 改动CAS源代码实现与ESS动态password验证对接
查看>>
boost.asio学习笔记一、linux下boost库的安装
查看>>
在那江南烈日与阵雨中-江南100赛记
查看>>
秒懂单链表及其反转(reverse)
查看>>
王立平--TF卡
查看>>
HTML5中x-webkit-speech语音输入功能
查看>>
hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)
查看>>
阻尼滑动--能够滑动过度的ScrollView(OverScrollView)
查看>>
Nginx日志配置及配置调试
查看>>
(转)RabbitMQ学习之spring整合发送同步消息
查看>>
Hive QL——深入浅出学Hive
查看>>
no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)
查看>>
mybatis generator 生成中文注释
查看>>