06.DQL查询语句--列控制
2018-12-20 本文已影响21人
Liuzhl
DQL(Data Query Language)
- 数据查询语言,用来查询记录(数据)
- 查询语句不会修改数据库
准备表和数据
-
emp表结构及数据
emp表结构.png
emp表数据.png
emp表外键.png -
dept表结构及数据
dept表结构.png
- emp表 sql语句
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`empno` int(11) NOT NULL AUTO_INCREMENT,
`ename` varchar(50) DEFAULT NULL,
`job` varchar(50) DEFAULT NULL,
`mgr` int(11) DEFAULT NULL,
`hiredate` date DEFAULT NULL,
`sal` decimal(7,2) DEFAULT NULL,
`COMM` decimal(7,2) DEFAULT NULL,
`deptno` int(11) DEFAULT NULL,
PRIMARY KEY (`empno`),
KEY `fk_emp` (`mgr`),
KEY `deptno` (`deptno`),
CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptno`) ON DELETE CASCADE,
CONSTRAINT `fk_emp` FOREIGN KEY (`mgr`) REFERENCES `emp` (`empno`)
) ENGINE=InnoDB AUTO_INCREMENT=1017 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('1001', '甘宁', '文员', '1013', '2000-12-17', '8000.00', null, '20');
INSERT INTO `emp` VALUES ('1002', '黛绮丝', '销售员', '1006', '2001-02-20', '16000.00', '3000.00', '30');
INSERT INTO `emp` VALUES ('1003', '殷天正', '销售员', '1006', '2001-02-22', '12500.00', '5000.00', '30');
INSERT INTO `emp` VALUES ('1004', '刘备', '经理', '1009', '2001-04-02', '29750.00', null, '20');
INSERT INTO `emp` VALUES ('1005', '谢逊', '销售员', '1006', '2001-09-28', '12500.00', '14000.00', '30');
INSERT INTO `emp` VALUES ('1006', '关羽', '经理', '1009', '2001-05-01', '28500.00', null, '30');
INSERT INTO `emp` VALUES ('1007', '张飞', '经理', '1009', '2001-09-01', '24500.00', null, '10');
INSERT INTO `emp` VALUES ('1008', '诸葛亮', '分析师', '1004', '2007-04-19', '30000.00', null, '20');
INSERT INTO `emp` VALUES ('1009', '曾阿牛', '董事长', null, '2001-11-17', '50000.00', null, '10');
INSERT INTO `emp` VALUES ('1010', '韦一笑', '销售员', '1006', '2001-09-08', '15000.00', '0.00', '30');
INSERT INTO `emp` VALUES ('1011', '周泰', '文员', '1008', '2007-05-23', '11000.00', null, '20');
INSERT INTO `emp` VALUES ('1012', '程普', '文员', '1006', '2001-12-03', '9500.00', null, '30');
INSERT INTO `emp` VALUES ('1013', '庞统', '分析师', '1004', '2001-12-03', '30000.00', null, '20');
INSERT INTO `emp` VALUES ('1014', '黄盖', '文员', '1007', '2002-01-23', '13000.00', null, '20');
- dept表sql
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` int(11) NOT NULL,
`dname` varchar(50) DEFAULT NULL,
`loc` varchar(50) DEFAULT NULL,
PRIMARY KEY (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('10', '教研部', '北京');
INSERT INTO `dept` VALUES ('20', '学工部', '上海');
INSERT INTO `dept` VALUES ('30', '销售部', '广州');
INSERT INTO `dept` VALUES ('40', '财务部', '武汉');
基本查询
1.查询所有列
select * from 表名;
2.查询指定列
select 列1... from 表名;
3.去除重复列 distinct关键字
select distinct 列1... from· 表名
- 注意:所选列只要有数据不一样,那么记录就不一样,不会被去重。
列运算
1.数字类型
- 数字类型可以做加、减、乘、除四则运算,如给全体员工提薪50%
select empno, ename, sal, sal * 1.5 AS changed_sal from emp;
数字类型列运算.png
- 非数字类型四则运算,原数据被当作0处理
select * , ename + 100 from emp;
- null与数字四则运算结果为null
select *, sal + comm from emp;
2.转换null值
- 上面null值运算结果为null不是我们想要的结果,那么如何将null当做0来用呢?-- 使用ifnull 函数
select *, sal + ifnull(comm, 0) from emp;
3.拼接字符串
- 使用concat()函数将多列拼接起来成为一列展示
SELECT CONCAT(ename, ' ' ,sal) FROM emp
4.取别名
- 上面的查询中列名为 CONCAT(ename, ' ' ,sal)不好看也不好用,可以用as关键字给该列取个别名,as可省略。
SELECT CONCAT(ename, ' ' ,sal) AS enameAndSal FROM emp