一.内联结、外联结、左联结、右联结的含义及区别
在SQL标准中规划的(Join)联结大致分为下面四种:
1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
2.外联结:分为外左联结和外右联结。
左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。
右联结A、B表的结果和左联结B、A的结果是一样的,最后出来的记录集会包括表B的全部记录。具体如下:

Select lqf_user.id,lqf_user.userName,lqf_job.id,lqf_job.userName From lqf_user Left Join lqf_job On lqf_user.id=lqf_job.id

Select lqf_user.id,lqf_user.userName,lqf_job.id,lqf_job.userName From lqf_user Right Join lqf_job On lqf_job.id=lqf_user.id;

3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结。
4.无联结:没有使用联结功能,也有自联结的说法。

内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联 结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反。

2.外左联结

这样查询得到的结果将会是保留所有A表中联结字段的记录,若无与其相对应的B表中的字段记录则留空,结果如下:

Select lqf_job.id,lqf_job.userName From lqf_user Left Join lqf_job On lqf_user.id=lqf_job.id;

3.外右联结

出来的记录已以lqf_job记录为标准

Select lqf_job.id,lqf_job.userName From lqf_user right Join lqf_job On lqf_user.id=lqf_job.id

Select lqf_job.id,lqf_job.userName,lqf_job.jobName From lqf_user right Join lqf_job On lqf_user.id=lqf_job.id and lqf_user.userName=lqf_job.userName;

三.联表查询中用到的一些参数

1.USING (column_list):
其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子:
Select lqf_job.id,lqf_job.userName,lqf_job.jobName From lqf_user right Join lqf_job using (id,userName);,其作用相当于
Select lqf_job.id,lqf_job.userName,lqf_job.jobName From lqf_user right Join lqf_job On lqf_user.id=lqf_job.id and lqf_user.userName=lqf_job.userName;

2.STRAIGHT_JOIN:
由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

Select lqf_job.id,lqf_job.userName,lqf_job.jobName From lqf_user STRAIGHT_JOIN lqf_job On lqf_user.id=lqf_job.id and lqf_user.userName=lqf_job.userName;

查询两表全部信息:

Select * From lqf_user Left Join lqf_job On lqf_user.id=lqf_job.id;

其他:数据库的基本语法:

#显示数据库
show databases;

#判断是否存在数据库wpj1105,有的话先删除
drop database if exists student;

#创建数据库
create database student;

#删除数据库
drop database student;

#使用该数据库
use  class;

#显示数据库中的表
show tables;

#先判断表是否存在,存在先删除
drop table if exists student1;

#创建表
create table student(
id int auto_increment primary key,
name varchar(50),
sex varchar(20),
date varchar(50),
content varchar(100)
)default charset=utf8;

#删除表
drop table student;

#查看表的结构
describe student;  #可以简写为desc student;

#插入数据
insert into student values(null,'dd','男','1998-10-2','......'),(null,'bb','女','1889-03-6','......'),(null,'cc','女','1899-03-6','......'),(null,'cc','男','1894-03-6','......');//多条数据
insert into student values(null,'aa','女','1889-03-6','......');//插入单条数据

#查询表中的数据

# and 且
select * from student where date>'1989-1-2' and date<'1998-12-1';

# or 或

select * from student where date<'1899-11-2' or date>'1990-12-1';

#between

select * from student where date between '1890-1-2' and '1994-12-1';

#in 查询制定集合内的数据
select * from student where id in (1,3,5);

#排序 asc 升序  desc 降序

ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

select * from student order by id desc;

#分组查询 #聚合函数 
select max(id),name,sex from student group by sex;

select min(date) from student;

select avg(id) as '求平均' from student;

select count(*) from student;   #统计表中总数

select count(sex) from student;   #统计表中性别总数  若有一条数据中sex为空的话,就不予以统计~

select sum(id) from student;

#查询第i条以后到第j条的数据(不包括第i条)

#修改表的名字
#格式:alter table tbl_name rename to new_name
alter table c rename to a;
 
#表结构修改
create table test
(
id int not null auto_increment primary key, #设定主键
name varchar(20) not null default 'NoName', #设定默认值
department_id int not null,
position_id int not null,
unique (department_id,position_id) #设定唯一值
);

#向表中增加一个字段(列)
#格式:alter table student add type_id int;/alter table student add(type_id int);
alter table student add  type_id varchar(20);

#修改表中某个字段的名字
alter table tablename change columnname newcolumnname type;  #修改一个表的字段名
alter table student change name uname varchar(50);

select * from student;

#表student 增加列test
alter table student add(test char(10));

#表student 修改列test
alter table student modify test char(20) not null;
#表student 去掉列test
alter table student drop column test;

mysql联表查询,使用phpStudy自带的的更多相关文章

  1. (转)MySQL联表查询

    资料源于网络   一.内联结.外联结.左联结.右联结的含义及区别在SQL标准中规划的(Join)联结大致分为下面四种:1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.2 ...

  2. [MySQL] MySQL联表查询的执行顺序优化查询

    SELECT t4.orgName, t3.projectName, t3.Partner, t1.type, COUNT(DISTINCT t1.imei) AS count FROM `t_tem ...

  3. Linux mysql 联表查询

    在rhce考试题中,第21.22题为数据库查询题 题目: 在system1上创建一个Maria DB数据库,名为Contacts,要求: 数据库应该包含来自数据库users.mdb的内容,数据库只能被 ...

  4. 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表

    一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表 ...

  5. 【explain】MySQL联表查询中的驱动表

    写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...

  6. MySQL 联表查询

    关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...

  7. mysql联表查询

    2.1 内连接 select a.*,b.* FROM  a INNER join  b  ON a.id = b.id;  查出所有 或者 select a.*,b.* FROM a join b ...

  8. [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: ...

  9. Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

随机推荐

  1. [POI2011]SMI-Garbage

    题目描述 http://main.edu.pl/en/archive/oi/18/smi The Byteotian Waste Management Company (BWMC) has drast ...

  2. Producer-Consumer 生产者,消费者

    这个模式跟Guarded模式有点类似,不过需要一个控制台限制请求方和处理方的频度和数量. public class ProducerConsumerTest { /** * @param args * ...

  3. 【数位DP】CF55D Beautiful numbers

    $dp[x][p][pp]$表示第x位,当前已有数字mod 2520(1~9数字的lcm)为p,当前各位数字的lcm为pp 观察到数组太大,考虑压缩,第三维lcm最多只有9个数字,打表发现最多只有48 ...

  4. PHP算法之增减字符串匹配

    给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length. 返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i ...

  5. leetcode-8-字符串转换整数(atoi)

    题目描述: 方法一:正则 class Solution: def myAtoi(self, str: str) -> int: return max(min(int(*re.findall('^ ...

  6. leetcood学习笔记-2-两数相加

    题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.va ...

  7. 【JZOJ6294】动态数点

    description analysis 这题出的失败在只卡正解不卡暴力 比较好想的方法是枚举约数,向两边二分,但是这个不满足二分性 首先用\(ST\)表维护区间的\(\gcd\),不用线段树,这样查 ...

  8. 携程的 Dubbo 之路

    本篇文章整理自董艺荃在 Dubbo 社区开发者日上海站的演讲. 缘起 携程当初为什么要引入 Dubbo 呢?实际上从 2013 年底起,携程内主要使用的就是基于 HTTP 协议的 SOA 微服务框架. ...

  9. vue+Iview+gulp 生成文档说明

    1.安装npm gulp相关插件 比如:gulp.gulp-concat.gulp-htmlmin.gulp-cssmin.gulp-cheerio.gulp-clean 2. 编写gulpfile. ...

  10. duilib教程之duilib入门简明教程12.简单控件介绍

    前面的教程应该让大家对duilib的整体有所映像了,下面就来介绍下duilib具体控件的使用.    由于官方没有提供默认的控件样式,所以我就尽量使用win7或者XP自带的按钮样式了,虽然界面比较土鳖 ...