mysql

1: int和tinyint的使用。

  int占4个字节,tinyint占1个字节,这样节约磁盘空间。

2:DELETE的别名

  删除表的内容。

DELETE FROM 表名称 WHERE 列名称 = 值

  给表起别名,然后进行删除

DELETE 别名 FROM 表名称 别名 WHERE 列名称 = 值
3: in 的讲解。

现在要查询既学习了1课程,又学习了2课程的人

SELECT
    a.s_id,
    a.c_id
FROM
    a_sc a
WHERE
    a.c_id IN ("001", "002")

输出的结果:

可以看出,4只包含了2,5只包含了1.然后都给查出来了。这样是不正确的。

应该用exists

SELECT
    a_student.s_id,
    a_student.sname
FROM
    a_student
INNER JOIN a_SC ON a_student.s_id = a_sc.s_id
WHERE
    a_student.s_id = a_sc.s_id
AND a_sc.c_id = '001'
AND EXISTS (
    SELECT
        *
    FROM
        a_sc AS SC_2
    WHERE
        SC_2.S_id = a_sc.s_id
    AND SC_2.c_id = '002'
);

exists返回值是true 或者false。先把001的都给查询出来。然后去查询002的。如果为true,显示出来。返回false,不显示出来。

下面来演示  NOT EXISTS

SELECT
    a_student.s_id,
    a_student.sname
FROM
    a_student
INNER JOIN a_SC ON a_student.s_id = a_sc.s_id
WHERE
    a_student.s_id = a_sc.s_id
AND a_sc.c_id = '001'
AND NOT EXISTS (
    SELECT
        *
    FROM
        a_sc AS SC_2
    WHERE
        SC_2.S_id = a_sc.s_id
    AND SC_2.c_id = '002'
);

显示的结果是:

这里为什么显示5,不显示4呢?

是因为用“=001” 和ture或false去判断的。这里表示查询学习了001,但是没有学习002的。





原文地址:https://www.cnblogs.com/bulrush/p/8901368.html