从头开始学MySQL--------查询(1)

7.2.1  查询所有字段

        使用通配符  *  来查询所有数据

SELECT * FROM fruits;

        优点:当不知道表的列名称的时候,可以节约时间,快速知道列的名称。

        缺点:获取不需要的数据可能会降低查询的效率。而且会出现全表扫描,要谨慎使用。我同学的公司的数据库表,数据量通常都是百万级别的,用这个SQL语句出结果估计要等到太阳下山。

       查询单字段  SELECT 字段  FROM 表名;

       查询多字段  SELECT 字段A,字段B ....,字段N  FROM 表名;

       条件查询      SELECT 字段 FROM 表名 WHERE 查询条件;

7.2.4  带IN关键字的查询

       使用IN将查询 满足指定范围内的条件的 记录。

SELECT
	f_name
FROM
	fruits
WHERE
	s_id IN (101, 102)

  

     相反,可以使用 NOT IN 来检索不在条件范围内的所有记录。

     查询s_id 既不为101,也不为102的所有记录。

SELECT
	f_name
FROM
	fruits
WHERE
	s_id NOT IN (101, 102)

7.2.5  BETWEEN AND 范围查询

      查询某个范围的值,包括开始值与结束值,一般用于数值型,常用于ID。

SELECT
	f_name,
	f_price
FROM
	fruits
WHERE
	f_price BETWEEN 1 AND 100

7.2.6  模糊查询 LIKE

        MySQL的通配符有'%'与'_'。'%'视为任意长度的字符串。'_'视为一个字符串。

       '%a'匹配以a结尾的字符串。'a%'匹配以a开头的字符串。'%a%'匹配含有字符a的字符串。

       从fruits表中查询f_name字段 中含有o的记录

SELECT
	f_name
FROM
	fruits
WHERE
	f_name LIKE '%o%'   

  

7.2.7 空值查询

       从算术运算符的章节,已经学过  SELECT A IS NULL;  SELECT A IS NOT NULL; 返回的是 1或者0;

       现在用于条件判断了,查询f_price 是 NULL 的所有记录。  IS NULL 与 IS NOT NULL 相反。

SELECT
	f_name
FROM
	fruits
WHERE
	f_price IS NULL
--      f_price IS NOT NULL

7.2.8  带AND的多条件查询

         查询只有满足所有查询条件的记录才会被返回。AND可以连接两个甚至多个查询条件。

SELECT
	*
FROM
	fruits
WHERE
	f_id = 'a1' AND s_id < 102;

7.2.9  带OR的多条件查询

        在算术运算符中。与‘AND  && ’、 或‘OR  ||’、非 ‘NOT !’。

        使用OR操作符,表示只需要满足其中一个条件的记录即可返回。

        exprA || exprB  ,只要满足一个条件,返回的就是真。

        s_id in (101,102)  与   s_id = 101  OR  s_id = 102 效果是一样的。

OR的注意点

       (1)使用IN操作符使得查询语句变得更加简洁明了,IN的速度也同样快于OR。

       (2)更重要的是IN操作符可以执行更加复杂的嵌套查询。

       (3)OR与AND的优先级:先做AND的操作,再连接OR

                       A AND B OR C        A OR B AND C

        等价于   (A AND B) OR C      A  OR  (B AND C)

SELECT
	*
FROM
	fruits
WHERE
	f_id IS NULL 
  OR 
        s_id IS NOT NULL

  

7.2.10  查询结果不重复(去重)

        去重语法格式:SELECT DISTINCT 字段  FROM 表名 WHERE 条件;

        下面的例子中,

        第一条语句查询到了4条记录: 101、101、102、103 

        第二条语句查询到了3条记录: 101、102、103 

        即查询结果相同的算一条记录。

SELECT s_id FROM fruits;
SELECT DISTINCT s_id FROM fruits;

        再看下面的SQL

SELECT DISTINCT s_id , f_name FROM fruits;

  

        这说明:DISTINCT控制的重复是DISTINCT后面所有字段!即查询出来的记录中的s_id、f_name必须完全一样,才能算同一条。而不是单纯的s_id相同就去重。

        如果你有下面的这个SQL,查询出来的数据是

SELECT ID,NAME FROM`dept`

  

         假设查出来了两条ID为1的数据,将NAME属性视为通过不同的外连接查询到的数据。

         如果此时我的需求是:去掉ID重复的数据。下面这条SQL是行不通的。为什么?因为DISTINCT会将后面的所有字段去重,即不同记录中,ID与NAME属性完全一样,才能视为是相同的数据。

SELECT DISTINCT ID,NAME FROM`dept`

         所以, 我们需要上述的数据进行分组操作。所以,ID相同的数据,默认就展示一条了。

SELECT  ID,NAME,COUNT(*) FROM`dept`  GROUP BY  ID

  

阅读更多

         目录贴:从头开始学MySQL-------目录帖

.

 

 

 

 

posted @ 2022-07-17 12:15  小大宇  阅读(38)  评论(0编辑  收藏  举报