zoukankan      html  css  js  c++  java
  • mysql 常用查询

       寻找列的最大值
            使用 MAX() 函数计算物品号 的最大值
            
        查询某列最大值所在的行    
        
                # 显示price这一列最大值对应的行
                mysql> SELECT article, dealer, price
                    -> FROM   shop
                    -> WHERE  price=(SELECT MAX(price) FROM shop);

            另外一个方法是对所有行进行价格的降序排序,然后使用MySQL特有的LIMIT子句显示其中一行(这里是指定第一行显示最高价格):
                mysql> SELECT article, dealer, price
                    -> FROM shop
                    -> ORDER BY price DESC
                    -> LIMIT 1;
            大家可以输入上述语句查询结果是否一样。
            --注:如果有多项物品的价格都是19.95(最贵的物品不止一个),那么LIMIT的显示结果也只会显示其中一个
            
        按组显示列的最大值
            通过以下代码找出每项物品中对应出价最高价格
                mysql> SELECT article, MAX(price) AS price
                    -> FROM shop
                    -> GROUP BY article;

        使用用户变量
            通过使用用户变量找出价格最高或者最低的物品:
                mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
                mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

        使用外键
            在MySQL中,InnoDB 表支持外键约束的检查。
            在连接两个表的时候并不需要外键约束。对于除InnoDB表以外的表,可以使用REFERENCES tbl_name(col_name)语句定义将它的列设置为外键,但是该语句并没有实际的作用,只是作为备注来提醒你现在正在定义的列指向另外一个表的列。在执行该语句的时候需要注意以下几点:
                MySQL并不会执行任何操作检查列col_name是否存在于表tbl_name中(它甚至不会检查tbl_name这个表是否真正存在)。
                MySQL不执行表tbl_name中的操作,例如对你正定义的行的进行更改行为,致使ON DELETE或ON UPDATE语句在该行上不会生效(意思是如果你在REFERENCES子句中写入ON DELETE或ON UPDATE子句,将被忽略)。
                该句法可以创建一个列;但不创建任何索引或关键字。
            你可以使用下面的语句建立两个表并定义外键连接两个表中的列:
                mysql> CREATE TABLE person (
                    -> id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
                    -> name CHAR(60) NOT NULL,
                    -> PRIMARY KEY (id)
                    -> );

                mysql> CREATE TABLE shirt (
                    -> id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
                    -> style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
                    -> color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
                    -> owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
                    -> PRIMARY KEY (id)
                    -> );

                mysql> INSERT INTO person VALUES (NULL, 'Antonio Paz');

                mysql> SELECT @last := LAST_INSERT_ID();

                mysql> INSERT INTO shirt VALUES
                    -> (NULL, 'polo', 'blue', @last),
                    -> (NULL, 'dress', 'white', @last),
                    -> (NULL, 't-shirt', 'blue', @last);

                mysql> INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');

                mysql> SELECT @last := LAST_INSERT_ID();

                mysql> INSERT INTO shirt VALUES
                    -> (NULL, 'dress', 'orange', @last),
                    -> (NULL, 'polo', 'red', @last),
                    -> (NULL, 'dress', 'blue', @last),
                    -> (NULL, 't-shirt', 'white', @last);
            尝试查询person和shirt这两个的内容
            按照以上方式建立表,并使用语句SHOW CREATE TABLE或者DESCRIBE查看输出结果,你会发现REFERENCES子句并不会出现在结果中:
                SHOW CREATE TABLE shirtG

        使用两个关键字进行搜索
            充分利用OR连接两个关键字(AND也是一样的道理)
                # 这里面的test_table可以是任何一个表,关键词也是类似
                SELECT field1_index, field2_index FROM test_table
                WHERE field1_index = '1' OR  field2_index = '1'
            还可以使用UNION将表里面的两个关键字一起使用进行搜索
                SELECT field1_index, field2_index
                    FROM test_table WHERE field1_index = '1'
                    UNION
                SELECT field1_index, field2_index
                    FROM test_table WHERE field2_index = '1';
        
        计算每月的访问量
            下面使用BIT_COUNT函数计算每个月中某用户访问网页的天数:
                CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
                    day INT(2) UNSIGNED ZEROFILL);
                INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
                    (2000,2,23),(2000,2,23);
            上述建立的表中有用户访问网页的年月日,可以使用以下语句查询每个月的访问天数:
                SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
                    GROUP BY year,month;

        使用 AUTO_INCREMENT 语句
            在定义列属性的时候添加AUTO_INCREMENT语句可以使得每条记录都能被唯一标识:
                CREATE TABLE animals (
                     id MEDIUMINT NOT NULL AUTO_INCREMENT,
                     name CHAR(30) NOT NULL,
                     PRIMARY KEY (id)
                 );

                INSERT INTO animals (name) VALUES
                    ('dog'),('cat'),('penguin'),
                    ('lax'),('whale'),('ostrich');

                SELECT * FROM animals;

            查看以上语句的返回结果,你会发现id是自动生成的。
            要想AUTO_INCREMENT语句生成的起始值不是1,可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:
                mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
            更多关于AUTO_INCREMENT语句的学习:
                如何为列指定AUTO_INCREMENT属性:CREATE TABLE语法和ALTER TABLE语法。
                找出含有最新的AUTO_INCREMENT值的行:比较函数和操作符。

  • 相关阅读:
    SpringMVC-乱码问题
    SpringMVC-数据提交
    SpringMVC-结果跳转方式
    SpringMVC-Controller&RestFul
    SpringMVC-基础
    Spring-声明式事务
    Spring-整合MyBatis
    Spring-AOP
    android 入门-工序
    android 入门-android Studio 解决方案
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10048303.html
Copyright © 2011-2022 走看看