美文网首页数据库程序员
SQL——附加基本运算

SQL——附加基本运算

作者: 薛定谔与猫的故事 | 来源:发表于2018-03-31 23:10 被阅读103次

    1、更名运算

    1)通用形式:

    old-name as new-name

    2)存在原因:
    a)from子句的两个关系中可能存在同名属性,在这种情况下,结果中就会出现重复的属性名
    b)select子句中使用算术表达式,结果属性就没有名字
    c)有时候我们看某个名字不爽,就可更改那个名字[捂脸.jpg]
    3)示例:
    SELECT name AS instructor_name,course_id
    FROM instructor,teaches
    WHERE instructor.id = teaches.id;
    #在这里呢?很明显是为了凸显这个name(名字)是属于instructor(教师)的。
    

    as子句在重命名关系中很有用。重命名关系是把长的关系名变成短的,使得查询更加方便。例如

    SELECT T.name,S.course_id
    FROM instructor AS T,teaches AS S
    WHERE T.id = S.id;
    

    如果你是在IDE上操作数据库,是没啥感觉的(因为有自动补全功能),但在命令行中,重命名关系就显得重要了。

    在上面的查询中,T和S可以认为是关系的拷贝,更准确说是关系的别名。诸如T、S,被称作相关名称,通常也称作表别名、相关变量、元组变量等等。

    2、字符串运算

    在SQL中,使用一对单引号来标识字符串,例如'hello world'。而如果单引号是字符串的一部分,那就用两个单引号表示,如:'it''s right' 表示 it's right。

    在SQL标准中,字符串的相等运算时大小写敏感的。在其他数据库方言中可能并非如此,如MySQL,SQL Server中是不区分大小写的(当然,你也可以更改这些设置)

    SQL字符串操作函数:
    1)upper(s)将字符串转换为大写;
    2)lower(s)将字符串转换为小写;
    3)trims(s)去掉字符串后面的空格;

    使用like实现字符串的模式匹配
    使用两个特殊的字符来描述模式(模式匹配是大小写敏感的):
    百分号(%):匹配任意字符串;
    下划线(_):匹配任意一个字符;

    示例:
    1)‘str%’匹配任何一str开头的字符串;
    2)‘%com%’匹配任何包含‘com’子串的字符串,例如‘company’,‘compute’等。
    3)‘_ _ _’匹配只含三个字符的字符串;
    4)‘ _ _ _ %’匹配至少含三个字符的字符串;(三条下划线是没有空格,空格也是字符)

    SQL示例

    #将教师名字转化为大写
    SELECT upper(name) AS upname
    FROM instructor
    where name LIKE '%e%';
    
    # 找出名字包含有e的教师的信息
    SELECT*
    FROM instructor
    where name LIKE '%e%'
    
    instructor表的所有数据 限制操作后的结果表
    转换大写

    值得注意的是:
    但我们所要限制的字符串当中包含%或者_时,则需要使用转义字符,SQL中使用escape来定义转义字符,例如

    #匹配所有以开头为‘ab%cd’的字符串
    like 'ab\%cd%' escape '\';
    
    #匹配所有以‘ab\cd’开头的字符串
    like 'ab\\cd%' escape '\';
    

    当然转义字符不一定是这里所写的'\',也可以是其他字符,不过在大多编程语言当中,用'\'来充当转义字符。

    3、排列元组的显示次序:

    order by子句:默认使用升序。

    通用形式:
    order by 要排序的属性名 <method>;
    <method>表示可写或不写, 选项有desc(降序),asc(升序);

    示例:

    # 根据属性id降序输出结果关系
    SELECT *
    FROM instructor
    ORDER BY id DESC ;
    
    降序输出

    4、where子句谓词的简化:

    between子句:表示在某个闭区间内;
    同理,not between 表示不再某个区间内;

    #下面两条句子是等价的
    SELECT *
    FROM instructor
    WHERE salary BETWEEN 10000 AND 12000;
    
    SELECT *
    FROM instructor
    WHERE salary>=10000 AND salary<=12000;
    

    再有:

    # 下面两条句子是等价的
    SELECT *
    FROM instructor
    WHERE salary = 66000.00 AND dept_name = 'biology';
    
    SELECT *
    FROM instructor
    WHERE (salary,dept_name) = (66000.00,'biology');
    

    相关文章

      网友评论

        本文标题:SQL——附加基本运算

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