美文网首页
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