-
MySQL连接查询
2014-05-27 15:14:34MySQL连接查询大致分为四种,下面就为您分别介绍这四种MySQL联结查询,如果您对此方面感兴趣的话,不妨一看。 MySQL联结查询大致分为下面四种: 1.内联结:将两个表中存在联结关系的字段符合联结关系的那些...MySQL连接查询大致分为四种,下面就为您分别介绍这四种MySQL连接查询,如果您对此方面感兴趣的话,不妨一看。
MySQL连接查询大致分为下面四种:
1.内连接:将两个表中存在连接关系的字段符合连接关系的那些记录形成记录集的连接。
2.外连接:分为外左连接和外右连接。
左连接A、B表的意思就是将表A中的全部记录和表B中连接的字段与表A的连接字段符合连接条件的那些记录形成的记录集的连接,这里注意的是最后出来的记录集会包括表A的全部记录。
右连接A、B表的结果和左连接B、A的结果是一样的,也就是说:
Select A.name B.name From A Left Join B On A.id=B.id
和Select A.name B.name From B Right Join A on B.id=A.id执行后的结果是一样的。
3.全连接:将两个表中存在连接关系的字段的所有记录取出形成记录集的连接(这个不需要记忆,只要是查询中提到了的表的字段都会取出,无论是否符合连接条件,因此意义不大)。
4.无连接:不用解释了,就是没有使用连接功能,也有自连接的说法。
这里有个比较简便的记忆方法,内外连接的区别是内连接将去除所有不符合条件的记录,而外连接则保留其中部分。外左连接与外右连接的区别在于如果用 A左连接B则A中所有记录都会保留在结果中,此时B中只有符合连接条件的记录,而右连接相反,这样也就不会混淆了。 -
mysql连接查询
2017-09-12 21:49:58连接查询 交叉连接 交叉连接会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。 交叉连接语法: SELECT * FROM TABLE_A CROSS JOIN TABLE_B SELECT * FROM TABLE_A JOIN TABLE_B ...连接查询
交叉连接
交叉连接会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积。
交叉连接语法:
SELECT * FROM TABLE_A CROSS JOIN TABLE_B
SELECT * FROM TABLE_A JOIN TABLE_B
SELECT * FROM TABLE_A , TABLE_B
三种格式是等效的.
省略连接条件、连接条件无效、所有表中的所有行互相连接的情况下会产生笛卡儿积,为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
在表中有相同列时,在列名之前加上表名前缀以明确区分。
表的别名
AS 可以省略
使用别名可以简化查询。
使用表名前缀可以提高执行效率。
连接多个表
连接 n个表,至少需要 n-1个连接条件。
内连接:
合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行。
SELECT <列名>
FROM 表1 INNER JOIN 表2
ON 表1.列名 条件运算符 表2.列名
[WHERE 条件]
[ORDER BY 排序列]
其中“ON 表1.列名 条件运算符 表2.列名” 中,条件运算符常用的是:=、<>,>,<,>=,<=。
表1.列名和表2.列名,分别是两个表的公共列。
外连接
——左外联结 (LEFT JOIN)
——右外联结 (RIGHT JOIN)
外连接与普通连接的区别
普通连接操作只输出满足连接条件的元组
外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出:
左外连接:
左外连接使用LEFT JOIN连接两表,连接时左表为主表,获取左表所有记录,左表中的每条记录必定出现在结果集中,而在右表中没有对应的记录,将以NULL值进行填充。
SELECT * FROM TABLE_A
LEFT JOIN TABLE_B
ON 连接条件
[WHERE 条件]
算符常用的是:=、<>,>,<,>=,<=。
右外连接:
右外连接与与外连接相似,不同的是右表为主表,获取右表所有记录,右表中的每条记录必定出现在结果集中,而在左表中没有对应的记录,将以NULL值进行填充。
SELECT * FROM TABLE_A
RIGHT JOIN TABLE_B
ON 连接条件
[WHERE 条件]
算符常用的是:=、<>,>,<,>=,<=。
内连接时,得到的结果是公有数据集C。
左外连接时,得到的是A1+C。
右外连接时,得到的是B1+C。
limit
限制由 SELECT 语句返回的数据数量,limit [offset,N]
offset可选,表示初始位置,默认为0
N,限制结果取N条 。 用法: limit [初始位置],取出条目
几个常用的端口:
web 的端口 80,FTP的端口是 21,HTTP通信用的端口号是80,mysql默认端口是3306,tomcat默认端口是8080。
JDBC
全称为:Java DataBase Connectivity(java数据库连接)。是访问数据库的一种技术
SUN公司为了简化、统一对数据库的操作,定义了一套jdbc接口,这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。简单的说,JDBC的意义在于在Java程序中执行SQL语句。
JDBC编程步骤:
1.加载注册驱动类Driver
Class.forName(“com.mysql.jdbc.Driver”);
2.建立连接
Connection connection = DriverManager.getConnection(
“jdbc:mysql://localhost:3306/test“,”root”,”root”);
3操作数据
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT A_NAME FROM A”);
while (rs.next()) {
String name = rs.getString("A_NAME");
System.out.println(“name is:”+ name);
}
4.释放资源
rs.close();
stmt.close();
connection.close();
注意添加try-catch-finally。
JDBC访问数据库的流程
加载注册驱动程序Driver;
通过DriverManager类获得表示数据库连接的Connection类对象;
通过Connection对象绑定要执行的语句,生成Statement类对象;
执行SQL语句,接收执行结果集ResultSet;
可选的对结果集ResultSet类对象的处理;
必要的关闭ResultSet、Statement和Connection
Connection
常用方法:
createStatement():创建向数据库发送sql的statement对象
prepareStatement(sql) :创建向数据库发送预编译sql的PreparedSatement对象
--- 存储过程
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。 ---与事务相关!!
rollback() :在此链接上回滚事务。
Statement
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。
Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。
Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
SQL 注入是用户利用某些系统没有对输入数据进行充分检查,从而进行恶意破坏的行为。
1、statement存在sql注入攻击问题:例如登陆密码采用xxx' or '1'='1
2、对于防范 SQL 注入,可以采用PreparedStatement取代Statement。prepareCall(sql):创建执行存储过程的callableStatement对象。)
PreparedStatement是Statement的子接口,它的实例对象可以通过调用Connection.preparedStatement(sql)方法获得,相对于Statement对象而言:
PreperedStatement可以避免SQL注入的问题。
Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
ResultSet (结果集)
Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标cursor,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进而调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的大部分方法都是用于获取数据的get方法
释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。、
JavaEE模式-DAO 模式
Data Access Object 抽象并封装了对底层数据源的操作
封装对于数据源的操作
数据源可能是文件、数据库等任意存储方式
负责管理与数据源的连接
负责数据的存取(CRUD)
不包含任何业务
-
Mysql连接查询
2015-08-04 00:26:28多张表应该在一起使用,将多个表的记录连接起来。 create table teacher( id int primary key auto_increment, name varchar(10), gender enum('male','female','secret') )engine innodb character set utf8; ...每个实体一个表。
多张表应该在一起使用,将多个表的记录连接起来。create table teacher( id int primary key auto_increment, name varchar(10), gender enum('male','female','secret') )engine innodb character set utf8; insert into teacher values(null,'奥巴马','male'); insert into teacher values(null,'杨幂','female'); insert into teacher values(null,'rose','secret'); insert into teacher values(null,'阿黛尔','female');
create table grade( id int primary key auto_increment, name varchar(10), room varchar(3) )engine innodb character set utf8; insert into grade values(null,'bigdata','203'); insert into grade values(null,'english','207'); insert into grade values(null,'maths','308'); insert into grade values(null,'PE','228');
create table teacher_grade( id int primary key auto_increment, t_id int, c_id int, day tinyint, begin_date date, end_date date )engine innodb character set utf8; insert into teacher_grade values(null,1,1,15,'2015-01-15','2015-01-30'); insert into teacher_grade values(null,1,2,18,'2015-02-10','2015-02-28'); insert into teacher_grade values(null,1,3,22,'2015-03-01','2015-03-23'); insert into teacher_grade values(null,2,1,20,'2015-03-05','2015-03-25'); insert into teacher_grade values(null,2,2,22,'2015-04-08','2015-04-30'); insert into teacher_grade values(null,3,1,15,'2015-05-01','2015-05-16'); insert into teacher_grade values(null,1,1,15,'2015-05-05','2015-05-20'); insert into teacher_grade values(null,3,3,15,'2015-07-01','2015-07-16'); insert into teacher_grade values(null,2,1,5,'2015-06-17','2015-06-23');
总体思路:
将所有的数据,按照某种条件,连接起来,在进行筛选处理。连接的分类:
根据连接条件的不同,分为如下:
内连接
外连接
自然连接内连接:
连接的多个数据必须同时存在才能进行连接。
tbl_left inner join tbl_right on 连接条件
select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade on teacher.id = teacher_grade.t_id;
内连接的处理:
无条件的内连接
内连接在连接时,可以省略条件。这就意味着左表的数据都要与右表的记录做一个连接,共存在M*N个连接,这种连接称之为交叉连接,或者笛卡尔积。
select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade; select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher cross join teacher_grade;
注意:
mysql中cross join与inner join相同,但在数据库的定义上,交叉连接就是笛卡尔积,是没有条件的inner join。
Mysql的inner join 是默认的连接方案,可以省略inner。有条件的内连接:
会在连接时过滤掉非法的连接。
where写法:
在理解上,数据完全交叉连接,连接完成后,再做数据过滤。select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade where teacher.id = teacher_grade.t_id;
on写法:
在连接时,就对数据进行判断。select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade on teacher.id = teacher_grade.t_id;
using的写法:
要求负责连接的两个实体之间的名字一致。select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade using(id);
同一业务,以下三种不同的写法:
select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade on teacher.id = teacher_grade.t_id and day>=20;
select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade where teacher.id = teacher_grade.t_id and day>=20;
建议使用的语法:
select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher inner join teacher_grade on teacher.id = teacher_grade.t_id where day>=20;
建议:
在有相同的字段时,使用using,
在通用条件时,使用on,
在数据过滤时(不是指的连接过滤)使用where。注意:
内连接的查询条件与外连接通用,但是外连接不能使用where作为连接条件。
无论是连接条件,还是连接查询多字段列表,都没有必要一定写表名.字段
的语法。是否写取决于是否发生冲突,如果冲突,则需要写;如果不冲突,无所谓。如果可以的话,尽量写上,保证代码的可读性。表别名:
表应该取别名,保证简介和清晰。
select t.name,tg.day,tg.begin_date from teacher as t inner join teacher_grade as tg on t.id = tg.t_id;
列别名:
select t.id as teacher_id ,tg.id as teacher_grade_id,t.name,tg.day,tg.begin_date from teacher as t inner join teacher_grade as tg on t.id = tg.t_id;
外连接:
如果负责连接的一个或多个数据不真实存在,则称之为外连接。
外连接:分为左外连接,右外连接,全外连接(MySQL暂不支持)。
左连接
left [outer] join
在连接时,如果出现左边表数据连接不到右边表的情况,
则左表的数据在最终的结果内保留。
而如果出现右边的表的数据连接不到左表的情况,右表的数据被丢弃。
反之亦然。select teacher.name,teacher_grade.day,teacher_grade.begin_date from teacher left outer join teacher_grade on teacher.id = teacher_grade.t_id;
select t.id as teacher_id ,tg.id as teacher_grade_id,t.name,tg.day,tg.begin_date from teacher as t left outer join teacher_grade as tg on t.id = tg.t_id;
右外连接
select t.id as teacher_id ,tg.id as teacher_grade_id,t.name,tg.day,tg.begin_date from teacher as t right outer join teacher_grade as tg on t.id = tg.t_id;
全外连接
mysql暂不支持全外连接,如果非要写,可以通过union模拟。
(select t.id as teacher_id ,tg.id as teacher_grade_id,t.name,tg.day,tg.begin_date from teacher as t left outer join teacher_grade as tg on t.id = tg.t_id) union (select t.id as teacher_id ,tg.id as teacher_grade_id,t.name,tg.day,tg.begin_date from teacher as t right outer join teacher_grade as tg on t.id = tg.t_id);
using:
使用using会去掉结果中的重复字段,并放在列前。
注意:
不能使用没有条件的外连接。自然连接
自然连接:通过mysql自己的判断完成的连接过程。不需要指定连接条件,mysql会使用多表内的,相同的字段,作为连接条件。
自然连接也有内连接,外连接之分。
内连接(natural join)
外连接:左外连接(natural left join),右外连接(natural right join)select * from one natural join two; select * from one inner join two using(public_field);
select * from one natural left join two; select * from one left join two using(public_field);
select * from one natural right join two; select * from one right join two using(public_field);
多表连接
连接时支持多表连接。
以下三张表:info_class:id,class_name info_student:id,student_name,class_id info_student_info:id,student_info
select s.*,si.* from info_class as c left join info_student as s on c.id=s.class_id left join info_student_info as si on s.id = si.id where c.class_name='001';
match表和class表
一个表可以连接多次,通过别名区分。match left join class on match.host_id=class.id left join class on match.guest_id=class.id
-
MySQL连接查询——MySQL 基础查询你会了吗?
2020-05-09 20:30:49文章目录2、MySql连接查询2.1、内连接(sql92 和sql99)2.1.1、sql92`1、等值连接`2、 为表起别名6、可以加排序吗?7、可以实现三表连接吗?2、非等值连接3、自连接2.1.2、sql99标准1、等值连接2、非等值连接3、 自...前言: 由于大一学习数据库不扎实,学到后面有点吃力,所以回过头来认真学习一边,写一些学习总结,提醒自己。也要告诫读者,把
基础打扎实
。读者觉得有用的话可以收藏点赞哦!
上一篇:MySQL函数查询——MySQL 基础查询你会了吗?
文章目录
2、MySql连接查询
年代划分 分sql92 和sql99语法,sql92语法支持内连接,不支持外连接。
sql99 支持内连接,也支持外连接和交叉连接。
2.1、内连接(sql92 和sql99)
2.1.1、sql92
1、等值连接
# 案例1:查询女神名和对应的男神名 SELECT `name`,boyName FROM boys,beauty WHERE beauty.boyfriend_id=boys.id # 案例二: 查询员工名和对应的部门名 SELECT CONCAT(last_name,first_name),department_name FROM departments,employees WHERE employees.department_id=departments.department_id
2、 为表起别名
/* 注意: 如果为表起了别名,则查询的字段就不能使用原来的表明去限定 */ # 查询员工名,工种号,工种名 SELECT last_name,e.job_id,job_title FROM employees e,jobs j WHERE e.job_id=j.job_id
3、可以加筛选吗? 可以d
# 案例一: 查询有奖金的员工名和部门名 SELECT e.last_name,d.department_name,e.commission_pct FROM employees e,departments d WHERE e.commission_pct IS NOT NULL AND e.department_id=d.department_id # 案例二:城市名中第二个字符为O的部门名和城市名 SELECT department_name,city FROM departments d,locations l WHERE d.location_id=l.location_id AND city LIKE '_o%'
4、可以加分组吗?
# 案例1、查询每个城市的部门个数 SELECT COUNT(*),city FROM locations l,departments d WHERE d.location_id=l.location_id GROUP BY city # 案例2、查询有奖金的每个部门的部门名和部门领导编号和该部门的最低工资 SELECT d.department_name,d.manager_id,MIN(e.salary) FROM departments d,employees e WHERE commission_pct IS NOT NULL AND d.department_id=e.department_id GROUP BY department_name,d.manager_id;
6、可以加排序吗?
案例一:查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT job_title,COUNT(*) FROM employees e,jobs j WHERE e.job_id=j.job_id GROUP BY job_title ORDER BY COUNT(*) DESC
7、可以实现三表连接吗?
案例: 查询员工名、部门名和所在的城市
SELECT e.last_name,d.department_name,l.city FROM employees e,departments d,locations l WHERE e.department_id=d.department_id AND d.location_id=l.location_id
2、非等值连接
案例1、查询员工的工资和工资级别
SELECT salary,grade_level FROM employees e,job_grades j WHERE salary BETWEEN j.lowest_sal AND j.highest_sal
3、自连接
#案例: 查询 员工名和上级的名称 SELECT e.employee_id ,e.last_name,m.employee_id,m.last_name FROM employees e,employees m WHERE e.manager_id=m.employee_id
2.1.2、sql99标准
1、等值连接
# 案例1、查询员工名,部门名 SELECT last_name,department_name FROM employees e INNER JOIN departments d ON e.department_id=d.department_id # 案例2、查询名字中包含e的员工名和工种名(筛选) SELECT last_name,job_title FROM employees e INNER JOIN jobs j ON e.job_id=j.job_id WHERE e.last_name LIKE '%e%' # 案例3、查询部门个数>3 的城市名和部门个数 (分组+筛选) SELECT city,COUNT(*) 部门个数 FROM departments d INNER join locations l on d.location_id=l.location_id GROUP BY city HAVING COUNT(*)>3 # 案例4、查询那个部门的部门员工个数>3的部门名和员工个数,并按个数降序 SELECT department_name,COUNT(*) FROM departments d INNER JOIN employees e ON d.department_id=e.department_id GROUP BY department_name HAVING COUNT(*)>3 ORDER BY Count(*) desc # 案例5、查询员工名、部门名、工种名、并按部门名降序 SELECT last_name,department_name,job_title FROM employees e INNER JOIN departments d ON e.department_id=d.department_id INNER JOIN jobs j ON e.job_id=j.job_id ORDER BY department_name DESC
2、非等值连接
# 查询员工的工资级别 SELECT salary,grade_level FROM employees e INNER JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal # 查询工资级别的个数>20的个数,并且按工资级别进行降序 SELECT COUNT(*),grade_level FROM employees e INNER JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal GROUP BY grade_level HAVING COUNT(*)>20 ORDER BY grade_level DESC
3、 自连接
# 案例: 查询 员工名和上级的名称 SELECT e.last_name 员工,m.last_name 领导 FROM employees e INNER JOIN employees m ON e.manager_id=m.employee_id # 案例: 查询 员工名和上级的名称 SELECT e.last_name 员工,m.last_name 领导 FROM employees e INNER JOIN employees m ON e.manager_id=m.employee_id WHERE e.last_name LIKE '%k%'
2.2、外连接
外连接 只有sql99语法支持
应用场景: 一个表中有另一个表中没有的记录。
特点:
1、外连接的查询结果为主表的所有记录
如果从表中有和它匹配的,则显示匹配的值。
如果从表中没有和它匹配,则显示为null
外连接查询结果为=内连接查询结果+主表中有而从表中没有的。
2、左外连接,LEFT OUTER JOIN 左边的表是主表
右外连接,RIGHT JOIN 右边的表是主表3、 左外和右外可以实现同样的效果
引入: 查询没有男朋友的女神名
左外连接
SELECT b.`name` FROM beauty b LEFT OUTER JOIN boys bo ON b.boyfriend_id=bo.id WHERE bo.id IS NULL
右外连接
SELECT b.`name` FROM boys bo RIGHT OUTER JOIN beauty b ON b.boyfriend_id=bo.id WHERE bo.id IS NULL SELECT b.*,bo.* FROM boys bo LEFT OUTER JOIN beauty b ON b.boyfriend_id=bo.id WHERE b.id IS NULL
案例一: 查询哪个部门没有员工
# 左外 SELECT d.*,e.employee_id FROM departments d LEFT OUTER JOIN employees e ON d.department_id=e.department_id WHERE e.employee_id IS NULL # 全外连接(不支持) SELECT b.*,bo.* FROM beauty b FULL OUTER JOIN boys bo ON b.boyfriend_id=bo.id
2.3、交叉连接(笛卡尔积)
SELECT b.*,bo.* FROM beauty b CROSS JOIN boys bo
-
Mysql 连接查询 Mysql支持的连接查询有哪些
2013-09-12 22:31:52Mysql 连接查询 Mysql支持的连接查询有哪些 -
mysql连接查询 内连接查询 外连接查询
2016-06-12 20:50:05连接查询 内连接查询 外连接查询 -
MySQL连接查询 内连接和外连接的区别
2017-04-03 21:59:19MySQL 连接查询 1.使用连接查询的场景 将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接); 进行数据的拼接(两张表的内容显示在一个结果表中 使用连接查询) 最终的结果是:记录数有可能变化,... -
MySQL连接查询语句
2019-08-12 17:25:17介绍MySQL的连接查询 -
MySQL连接查询—自身连接
2019-01-06 17:11:27连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件查询等 1.等值于非等值连接查询 连接查询的where子句中用来连接两个表的条件成为连接... -
mysql连接查询练习题(一)
2019-04-03 14:51:10mysql连接查询练习题(一) 一.数据库的三张表 dept(部门表) emp(员工表) salgrade(薪水级别表) 二.问题 1.取得每个部门最高薪水的人员名称 取得每个部门的最高薪水 select deptno,max... -
MySQL连接查询,内连接,外连接,全连接,交叉连接
2021-01-27 13:46:33MySQL多表连接查询1.含义2.多表连接分类2.1按sql语言分类2.2按功能分类3.多表连接语法3.1sql92语法3.2sql99语法4.练习 1.含义 当查询中涉及到多个表的字段,需要使用多表查询 select 字段1,字段2… from 表1,表2... -
mysql连接查询结果
2019-05-29 18:14:38result : mysql contcat_ws(separator,str1,str2) 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NUL... -
Mysql连接查询时索引失效,字符集问题
2017-12-16 19:53:08关于Mysql连接查询时索引失效的问题(字符集)开发过程中遇到一个sql,两张表a,b连接查询.a表数据量在3000左右, b表数据量在1w左右,连接时使用b表主键可a中某字段进行相等连接 a表全表扫描,b表通过主键连接EXPLAIN中...