SQL

作者: shirely大丫头 | 来源:发表于2019-03-12 22:46 被阅读0次

    1.基本查询:SELECT *FROM <表名>
    2.条件查询:
    not and or (优先级顺序)
    <> 不相等
    name LIKE 'ab%' 判断相似
    WHERE score >= 60 AND score <= 90 = WHERE score BETWEEN 60 AND 90
    3.投影查询:
    SELECT * 查询表的所有列
    SELECT 列1, 列2, 列3 FROM ... 让结果集仅包含指定列
    SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ... 给每列另外取别名
    SELECT 列1, 列2, 列3 FROM ... WHERE......
    4.排序:
    ORDER BY (从低到高)
    DESC(从高到低)

    SELET id,name,gender,score FROM students ORDER BY score DESC,gender;
    先按score 倒序,如果score相等,在按gender升序排列
    默认是升序ASC,从小到大,ASC可以省略,ORDER BY score ASC 和 ORDER BY score 一样

    如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面:

    SELECT id, name, gender, score
    FROM students
    WHERE class_id = 1
    ORDER BY score DESC;
    5.分页查询:(f分页实际上就是从结果集中“截取”出第M~N条记录)
    LIMIT M OFFSET N
    LIMIT 3 OFFSET 0

    可见,分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize(这里是3),然后根据当前页的索引pageIndex(从1开始),确定LIMIT和OFFSET应该设定的值:

    LIMIT总是设定为pageSize;
    OFFSET计算公式为pageSize * (pageIndex - 1)。
    这样就能正确查询出第N页的记录集。

    可简写:
    1.LIMIT 15 相当于 LIMIT 15 OFFSET 0
    2.在MySQL中,LIMIT 15 OFFSET 30还可以简写成LIMIT 30, 15。
    3.分页查询需要先确定每页的数量和当前页数,然后确定LIMIT和OFFSET的值

    6.聚合查询:
    查询表中一共有多少条记录,用COUNT()查询
    SELECT COUNT() FROM students;
    每页3条记录,如何通过聚合查询获得总页数:
    SELECT CEILING(COUNT(
    ) / 3) FROM students;
    分组聚合:GROUP BY
    SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;

    7.多表查询
    a.SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM <表1> <表2>
    SELECT * FROM students, classes 两个表行数乘积,列数之和
    b.FROM子句给表设置别名的语法是FROM <表名1> <别名1>, <表名2> <别名2>。这样我们用别名s和c分别表示students表和classes表
    SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
    FROM students s, classes c;

    同时满足条件s.gender = 'M'和c.id = 1
    SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
    FROM students s, classes c
    WHERE s.gender = 'M' AND c.id = 1;

    A.使用多表查询可以获取M x N行记录;
    B.多表查询的结果集可能非常巨大,要小心使用
    8.连接查询:
    A.SELECT s.id ,s.name,s.class_id,c.name class_name,s.gender,s.score FROM students s INNER JOIN classes c ON s.class_id =c.id
    B.INNER JOIN 返回同时存在于两张表的行数据
    RIGHT OUTER JOIN 返回右表都存在的行
    LEFT OUTER JOIN 返回左表都存在的行
    FULL OUTER JOIN 两张表所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL
    SELECT....FROM tableA ??? JOIN tableB ON tableA.column1 = tableB.column2

    修改数据:
    1.添加一条记录
    INSERT INTO <表名>(字段1,字段2,。。。)VALUES(值1,值2.。。。);
    2.添加二条记录
    INSERT INTO<表名>(字段1,字段2,。。。)VALUES(值1,值2.。。。),(值1,值2.。。。);
    3.更新数据库表中的记录
    UPDATE <表名> SET 字段1=值1,字段2=值2,.......WHERE .......;
    例如:UPDATE students SET name='大牛', score=66 WHERE id=1;
    4.一次更新N条记录
    UPDATE <表名> SET 字段1=值1,字段2=值2,.......WHERE id >=XX AND id<=XXX;
    5.UPDATE可以用表达式:
    UPDATE students SET score=score+10 WHERE score<80;
    6.更新整个表所有的记录:
    UPDATE students SET score=60;

    删除数据库表中的记录(DELETE)
    DELETE FROM students WHERE id =1;
    一次删除多条记录
    DELETE FROM students WHERE id>=5 AND id<=7;
    删除整个表的所有的记录
    DELETE FROM students;

    相关文章

      网友评论

          本文标题:SQL

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