美文网首页
06.DQL查询语句--列控制

06.DQL查询语句--列控制

作者: Liuzhl | 来源:发表于2018-12-20 14:58 被阅读21次

DQL(Data Query Language)

  • 数据查询语言,用来查询记录(数据)
  • 查询语句不会修改数据库

准备表和数据

  • emp表结构及数据


    emp表结构.png
    emp表数据.png
    emp表外键.png
  • dept表结构及数据


    dept表结构.png
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

相关文章

网友评论

      本文标题:06.DQL查询语句--列控制

      本文链接:https://www.haomeiwen.com/subject/laovhqtx.html