为一张表添加外键:

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

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

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

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

 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),

我们可以为列设置别名:

 SELECT First_name AS f_name, Last_name AS Family FROM t_customer;

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

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

 SELECT t_c.customer_id FROM t_customer AS t_c;

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

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

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

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

 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 将两张表联合起来。

 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可以用来合并两个查询的结果:

 SELECT Last_name FROM t_customer UNION SELECT customer_id FROM t_order;

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

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

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

SQL语句学习(二)的更多相关文章

  1. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  2. SQL 语句学习

     Sql语句学习 一. select playerId, count(playerId) as num from OperateLog_$i where playerId > 0 and roo ...

  3. SQl语句学习笔记(二)

    merge into        when matched then...  when not mached then... merge into t_road_pre_parameter a fr ...

  4. SQL知识点、SQL语句学习

    一. 数据库简介和创建1. 系统数据库在安装好SQL SERVER后,系统会自动安装5个用于维护系统正常运行的系统数据库: (1)master:记录了SQL SERVER实例的所有系统级消息,包括实例 ...

  5. Ibatis.Net 动态SQL语句学习(六)

    在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数吧. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&qu ...

  6. 精心整理的SQL语句学习大全

    -语 句 功 能  --数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据-数据 ...

  7. Python Django 之 直接执行自定义SQL语句(二)

    转载自:https://my.oschina.net/liuyuantao/blog/712189 一般来说,最好用 Django 自带的模型来实现这些操作.这里仅仅只是为了学习使用原始 SQL 而做 ...

  8. SQL语句整理(二) 数据定义语言DDL

    前言: 这是我学数据库时整理的学习资料,基本上包括了所以的SQL语句的知识点. 我的教材是人大王珊老师的<数据库系统概论>. 因为是手打的,所以会用一些细节打错了,但都挺明显也不多(考完试 ...

  9. SQL语句学习(一)

    这篇文章用来记录再学习SQL语句的过程. 首先,我们从简单的创建表开始.创建表的语法是CREATE TABLE 表名(列1的名字  列1的属性,列2的名字  列2的属性...); 如果希望将某一列作为 ...

随机推荐

  1. Go语言笔记(1)变量的定义与赋值

    变量的定义与赋值 在go笔记系列开始之前,我强烈建议大家使用Goland的IDM,配合vscode使用真的非常亲民. 1.go程序基本结构 首先,是go程序的基本结构,主要有package引入包.im ...

  2. find的基本查询命令《一》

    一. find的基本查询命令 find命令最常用的是查找某个文件,如: find ./ -name "abc.txt" 则会在当前目录及子目录下查找abc.txt文件 更常用的是查 ...

  3. 编译安装inotify-tools和监控inotifywait事件

                     编译安装inotify-tools软件包 1)解包inotify-tools-3.13.tar.gz文件 [root@svr7~]#ls inotify-tools- ...

  4. 家庭记账本app进度之关于tap的相关操作1

    今天还主要学习关于怎样制作微信的先关的tap. 今天的主要成果是已经了解了相关的技术,以及相关的思路.代码经过一个下午的编写,基本接近尾声. 更详细的实验代码,以及相关的知识点将在明天完善后进行发表. ...

  5. webpack中引用jquery

    1.首先需要添加项目中jquery的依赖 npm install jquery --save-dev 2.参考配置代码: var webpack = require("webpack&quo ...

  6. 【C#】写一个支持多人聊天的TCP程序

    碎碎念 先谈谈我们要实现的效果:客户端可以选择要聊天的对象,或者直接广播消息(类似QQ的私聊和群消息) 那么,该如何实现呢? 首先明确的是,要分客户端和服务器端两个部分(废话) 客户端:选择要发送的对 ...

  7. Blazor WebAssembly 3.2.0 Preview 4 如期发布

    ASP.NET团队如期3.16在官方博客发布了 Blazor WebAssembly 3.2.0 Preview 4:https://devblogs.microsoft.com/aspnet/bla ...

  8. vue(element)中使用codemirror实现代码高亮,代码补全,版本差异对比

    vue(element)中使用codemirror实现代码高亮,代码补全,版本差异对比 使用的是vue语言,用element的组件,要做一个在线编辑代码,要求输入代码内容,可以进行高亮展示,可以切换各 ...

  9. MySQL锁---InnoDB行锁需要注意的细节

    前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...

  10. synchronized 的真正含义

    @synchronized 锁的永远是对象 ,只针对于对象,只能锁对象,常量等是不能加synchronized,一旦加编译也不会通过 @synchronized 锁对象中的非static 就是锁调用该 ...