美文网首页
SQL 基础

SQL 基础

作者: 赵哥窟 | 来源:发表于2018-12-28 09:25 被阅读3次
    LIKE

    我们希望从上面的 “Persons” 表中选取居住在以 “N” 开始的城市里的人:
    我们可以使用下面的 SELECT 语句:

    SELECT * FROM Persons  WHERE City LIKE 'N%'
    

    提示:"%" 可用于定义通配符


    image.png
    NOT

    通过使用 NOT 关键字,我们可以从 “Persons” 表中选取居住在不包含 “lon” 的城市里的人: 我们可以使用下面的 SELECT 语句:

    SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
    

    我们希望从上面的 “Persons” 表中选取名字的第一个字符之后是 “eorge” 的人:
    我们可以使用下面的 SELECT 语句:

    SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
    

    我们希望从上面的 “Persons” 表中选取居住的城市以 “A” 或 “L” 或 “N” 开头的人:
    我们可以使用下面的 SELECT 语句:

    SELECT * FROM Persons WHERE City LIKE '[ALN]%'
    

    居住的城市不以 “A” 或 “L” 或 “N” 开头的人

    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
    
    CASE

    CASE语句不写ELSE子句时,执行结果是NULL。

    简单CASE表达式:

    CASE sex 
        WHEN '1' THEN '男'
        WHEN '2' THEN '女'
    ELSE '其他' END
    

    搜索CASE表达式:

    CASE 
        WHEN sex = '1' THEN '男'
        WHEN sex = '2' THEN '女'
    ELSE '其他' END
    

    UPDATE使用CASE

    UPDATE products
    SET prod_price = CASE 
        WHEN prod_price < 4 THEN prod_price + 0.51
        WHEN prod_price > 11 THEN prod_price - 0.99
        ELSE prod_price
    END
    

    CASE语句判断表达式

    SELECT course_name
        , CASE 
            WHEN course_id IN (
                SELECT course_id
                FROM opencourses
                WHERE month = 200706
            ) THEN 'O'
            ELSE 'X'
        END AS '6月'
        , CASE 
            WHEN course_id IN (
                SELECT course_id
                FROM opencourses
                WHERE month = 200707
            ) THEN 'O'
            ELSE 'X'
        END AS '7月'
        , CASE 
            WHEN course_id IN (
                SELECT course_id
                FROM opencourses
                WHERE month = 200708
            ) THEN 'O'
            ELSE 'X'
        END AS '8月'
    FROM coursemaster;
    
    INNER JOIN

    交集 内连接

    SELECT * FROM table_a
    INNER JOIN table_b ON table_a.id = table_b.id;
    
    image.png
    union all

    并集 全外连接

    SELECT * FROM table_a
    INNER JOIN table_b ON table_a.id = table_b.id
    UNION ALL
    SELECT * FROM table_a
    LEFT OUTER JOIN table_b ON table_a.id = table_b.id
    WHERE table_b.id IS NULL
    UNION ALL
    SELECT * FROM table_a
    RIGHT OUTER JOIN table_b ON table_a.id = table_b.id
    WHERE table_a.id IS NULL
    
    image.png
    count(*) 和 count(1)和count(列名)区别

    执行效果上:
    count(*)包括了所有的列,相当于行数,在统计结果的时候不会忽略列值为NULL 。
    count(1)包括了所有列,用1代表代码行,在统计结果的时候不会忽略列值为NULL 。
    count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空NULL的计数。

    执行效率上:
    列名为主键,count(列名)会比count(1)快
    列名不为主键,count(1)会比count(列名)快
    如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(
    如果有主键,则 select count(主键)的执行效率是最优的
    如果表只有一个字段,则 select count(
    )最优。

    where1=1
    string MySqlStr="select * from table where";
    if(Age.Text.Lenght>0)
    {
        MySqlStr=MySqlStr+“Age="+"'Age.Text'";
    }
    

    如果if语不成立,那么MySqlStr动态构造语句就变成了:
    MySqlStr="select * from table where"
    这是一条错误的语句,不能被执行,会报错。
    使用where 1=1语句后,若if不成立,MySqlStr语句就变成了:

    MySqlStr="select from table where 1=1;
    

    该语句语法正确,执行不会报错相当于

    MySqlStr=”select * from table
    

    被执行后,返回表中所有数据。意思就是,用户在多条件查询时,不输入任何条件,就会返回表中所有数据。

    CONCAT

    CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串。

    SELECT CONCAT(id, name, work_date)
        as info FROM employee_tbl;
    

    相关文章

      网友评论

          本文标题:SQL 基础

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