MySQL连接,函数的用法

创建A表和B表

CREATE TABLE `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE TABLE `b` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `A_id` int(11) DEFAULT NULL,
  `job` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `a` VALUES ('1', '小王');
INSERT INTO `a` VALUES ('2', '小张');
INSERT INTO `a` VALUES ('3', '小赵');
INSERT INTO `b` VALUES ('1', '2', '员工');
INSERT INTO `b` VALUES ('2', '4', '经理');

1.连接

1.1左连接

定义:是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。

(左边的表不加限制)

SELECT a.name,B.job from A LEFT JOIN B ON A.id=B.A_id;

1.2右连接

右连接的定义,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。

(右边的表不加限制)

SELECT a.name,b.job from A RIGHT JOIN B ON A.id=B.A_id;

1.3内连接

内链接:使用比较运算符根据每个表共有的列的值匹配两个表中的行。

(只有2张表匹配的行才能显示)

SELECT a.name,b.job from A inner JOIN B ON A.id=B.A_id;

1.4全连接

返回左右表中所有的记录和左右表中连接字段相等的记录。

mysql不支持全连接,可以用“UNION”将左连接和右连接联合在一块就是全连接。

(左右2张表都不加限制)

##不可用
SELECT a.name,b.job from A full JOIN B ON A.id=B.A_id;

SELECT a.name,B.job from A LEFT JOIN B ON A.id=B.A_id
UNION
SELECT a.name,b.job from A RIGHT JOIN B ON A.id=B.A_id;

2.聚合函数

准备数据

CREATE TABLE `emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `dept` varchar(50) DEFAULT NULL,
  `job` varchar(50) DEFAULT NULL,
  `sal` double DEFAULT NULL,
  `bonus` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('1', '王振华', '男', '1995-03-25', '市场部', '业务员', '1800', '400');
INSERT INTO `emp` VALUES ('2', '齐鸿哲', '男', '1994-04-06', '市场部', '业务员', '2500', '700');
INSERT INTO `emp` VALUES ('3', '刘小蕊', '女', '1996-06-14', '市场部', '业务员', '1400', '400');
INSERT INTO `emp` VALUES ('4', '陈晓山', '男', '1991-05-18', '市场部', '总经理', '4500', '600');
INSERT INTO `emp` VALUES ('5', '刘昱江', '男', '1993-11-18', '市场部', '业务员', '2600', '600');
INSERT INTO `emp` VALUES ('6', '王雪卉', '女', '1998-07-18', '行政部', '业务员', '3700', '700');
INSERT INTO `emp` VALUES ('7', '王学智', '男', '1995-08-18', '行政部', '总经理', '4850', '500');
INSERT INTO `emp` VALUES ('8', '范君昊', '男', '1999-09-18', '行政部', '业务员', '3200', '700');
INSERT INTO `emp` VALUES ('9', '刘辰阳', '男', '1990-10-18', '行政部', '业务员', '2700', '500');
INSERT INTO `emp` VALUES ('10', '韩运鹏', '男', '1980-12-18', null, 'CEO', '5000', null);
INSERT INTO `emp` VALUES ('11', '董运良', '男', '1988-02-05', '市场部', '业务员', '3200', '300');
INSERT INTO `emp` VALUES ('12', '张永昌', '男', '1989-01-11', '市场部', '业务员', '4200', '500');

2.1AVG

求平均工资+奖金

SELECT avg(sal+bonus) as 平均工资 from emp;

2.2COUNT

统计工资有多少人

SELECT count(*) from emp;

2.3MAX

求出最高工资

SELECT MAX(sal) from emp;

2.4MIN

求出最低奖金

SELECT min(bonus) from emp;

2.5SUM

求所有人员的工资加奖金

SELECT SUM(sal+bonus) from emp;

3.分组

根据部门进行分组

select dept from emp GROUP BY dept;

统记一下公司的男性和女性的收入总和

select gender,sum(sal) from emp GROUP BY gender;

统计一下公司男性和女性的数量

SELECT gender,count(*) from emp GROUP BY gender;
MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。 一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQL的concat函数可以连接一个或者多个字符串,如 mysql> select concat('10'); +--------------+ | concat('10') | +--------------+ | 10 | +--------------+ 1 row in set (0.00 sec) mysql> select concat('11','22','33'); +------------------------+ | concat('11','22','33') | +------------------------+ | 112233 | +------------------------+ 1 row in set (0.00 sec) MySQL的concat函数连接字符串的时候,只要其中一个是NULL,那么将返回NULL mysql> select concat('11','22',null); +------------------------+ | concat('11','22',null) | +------------------------+ | NULL | +------------------------+ 1 row in set (0.00 sec) MySQL中concat_ws函数 使用方法: CONCAT_WS(separator,str1,str2,...) CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。 注意: 如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 如连接后以逗号分隔 mysql> select concat_ws(',','11','22','33'); +-------------------------------+ | concat_ws(',','11','22','33') | +-------------------------------+ | 11,22,33 | +-------------------------------+ 1 row in set (0.00 sec) 和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL mysql> select concat_ws(',','11','22',NULL); +-------------------------------+ | concat_ws(',','11','22',NULL) | +-------------------------------+ | 11,22 | +-------------------------------+ 1 row in set (0.00 sec) MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ 6 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,逗号分隔(默认) mysql> select id,group_concat(name) from aa group by id; +------+--------------------+ | id| group_concat(name) | +------+--------------------+ |1 | 10,20,20| |2 | 20 | |3 | 200,500| +------+--------------------+ 3 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,分号分隔 mysql> select id,group_concat(name separator ';') from aa group by id; +------+----------------------------------+ | id| group_concat(name separator ';') | +------+----------------------------------+ |1 | 10;20;20 | |2 | 20| |3 | 200;500 | +------+----------------------------------+ 3 rows in set (0.00 sec) 以id分组,把去冗余的name字段的值打印在一行, 逗号分隔 mysql> select id,group_concat(distinct name) from aa group by id; +------+-----------------------------+ | id| group_concat(distinct name) | +------+-----------------------------+ |1 | 10,20| |2 | 20 | |3 | 200,500 | +------+-----------------------------+ 3 rows in set (0.00 sec) 以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序 mysql> select id,group_concat(name order by name desc) from aa group by id; +------+---------------------------------------+ | id| group_concat(name order by name desc) | +------+---------------------------------------+ |1 | 20,20,10 | |2 | 20| |3 | 500,200| +------+---------------------------------------+ 3 rows in set (0.00 sec) repeat()函数 用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数 mysql> select repeat('ab',2); +----------------+ | repeat('ab',2) | +----------------+ | abab | +----------------+ 1 row in set (0.00 sec) 又如 mysql> select repeat('a',2); +---------------+ | repeat('a',2) | +---------------+ | aa | +---------------+ 1 row in set (0.00 sec) mysql向表中某字段后追加一段字符串: update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串 update table_name set field=CONCAT('str',field) 这个函数对你也许会有很大帮助哦!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值