美文网首页
mysql语句

mysql语句

作者: 青乌 | 来源:发表于2022-04-13 15:50 被阅读0次

    常用语法

    create database - 创建新数据库
    alter database - 修改数据库
    create table - 创建新表
    alter table - 变更(改变)数据库表
    drop table - 删除表
    create index - 创建索引(搜索键)
    drop index - 删除索引

    select - 从数据库中提取数据
    update - 更新数据库中的数据
    delete - 从数据库中删除数据
    insert into - 向数据库中插入新数据

    创建新数据库:create database
    create database name
    
    创建新表:create table
    create table if not exists users(
         id INT NOT NULL AUTO_INCREMENT,
         name VARCHAR(100) NOT NULL,
         pass VARCHAR(100) NOT NULL,
         avator VARCHAR(100) NOT NULL,
         moment VARCHAR(100) NOT NULL,
         PRIMARY KEY ( id )
    )
    

    数据库检索

    语法顺序
    select - 选择列
    from - 目标表
    where - 条件判断
    group by - 分组
    having - 过滤分组
    order by - 排序
    limit - 行限制

    1. 检索:select + from

    检索列: users 表的 name 列
    SELECT name FROM users

    检索多列: users 表的 name + id 列
    SELECT name, id FROM users

    检索所有列: users 表的所有列
    SELECT * FROM users

    DISTINCT:重复的行只显示一次
    SELECT DISTINCT id FROM users

    2. 条件限制:where

    操作符
    = 、!= 、< 、> 、<= 、>= 、BETWEEN AND( 在指定的两个值之间)

    空值检查:
    IS NULL:列值为 NULL,返回 true。
    IS NOT NULL:列值不为NULL,返回 true。
    <=>:两个值都为 NULL ,返回 true。

    WHERE price = 1000;
    WHERE price != 1000;
    
    WHERE price IS NULL;
    WHERE price IS NOT NULL;
    

    AND&OR:
    AND表示同时满足所有条件,OR表示满足所有的单个条件
    优先处理AND, 后处理OR。要先处理OR,应该加()

    WHERE id = 1003 AND price <= 10;
    WHERE id = 1002 OR price = 10;
    WHERE id = 1002 OR id = 1003 AND price = 10;
    WHERE (id = 1002 OR id = 1003) AND price = 10;
    

    IN指定条件范围,NOT IN可以用来取反

    WHERE id IN (1002, 1003)
    WHERE id NOT IN (1002, 1003)
    

    LIKE子句+通配符 %、 _
    %表示任何字符串出现任意次数,区分大小写
    _表示任何字符串出现单次,区分大小写

    #检索以jet起头的产品名字
    WHERE prod_name LIKE 'jet%';
    # 检索产品名字中任意位置有care字符
    WHERE prod_name LIKE '%care%';
    # 检索产品名字中以s开头e结尾的字符,长度不限
    WHERE prod_name LIKE 's%e';
    

    正则表达式REGEXP

    WHERE prod_name REGEXP '1000'
    WHERE prod_name REGEXP '.000'
    WHERE prod_name REGEXP '1000|2000'
    WHERE prod_name REGEXP '[1|2|3]TON'
    
    3. 分组:group by

    不同供应商包含的产品计数并分组

    GROUP BY id;
    
    4. 过滤分组:having

    检索买了2次以上的客户,此处不能用WHERE

    HAVING COUNT(*) >= 2;
    
    5. 排序:order by

    排序:用name的字母顺序排序
    SELECT name FROM users ORDER BY name;

    多列排序:先用价格排序,再用名称排序
    SELECT id, price, name FROM products ORDER BY price, name;

    降序:无说明默认升序,降序需要用DESC(descrease)加以说明
    SELECT id, price, name FROM products ORDER BY price DESC;

    多列降序:在多个列上进行降序,需要对每个列都进行DESC说明
    SELECT id, price, name FROM products ORDER BY price DESC, name;

    6. 行限制:limit

    0-4行限制:检索开始的5行
    SELECT id FROM users LIMIT 5;

    5-10行限制:检索第6行开始的5行
    SELECT id FROM users LIMIT 6, 5;

    值计算

    1. Concat() 拼接,将值联结到一起构成单个值

    字符串拼接
    select concat(str1,str2...)

    把两列合并为一列
    select concat(vender, country) as vend

    2. AS赋予联结后的单个词一个别名

    title由name-country拼成
    SELECT Contact(name, '-',country) AS title

    3. 文本处理方法

    Left() - 左边的字符串
    Right() - 右边的字符串
    Length() - 字符串的长度
    Locate() - 找出串的一个子串
    SubString() - 子串的字符
    Soundex() - 字符串的SOUNDEX值(类似发音的字符串)
    RTrim() - 删除右边多余的空格
    LTrim() - 删除左边多余的空格
    Upper() - 转为大写
    Lower() - 转为小写

    4. 日期和时间处理方法

    Date() - 一个时间的日期
    Time() - 一个日期的时间
    Year() - 一个时间的年份
    Month() - 一个时间的月份
    Day() - 一个时间的天数
    Hour() - 一个时间的小时
    Minute() - 一个时间的分钟
    Second() - 一个时间的秒钟
    Now() - 当前日期和时间
    AddDate() - 增加一个日期
    AddTime() - 增加一个时间

    5. 算数计算

    基本运算: + - * /

    数学方法:
    Abs() - 绝对值
    Sqrt() - 平方根
    Rand() - 随机数
    Pi() - 圆周率
    Exp() - 指数值
    Mod() - 余数
    Cos() - 余弦值
    Sin() - 正弦值
    Tan() - 正切值

    AVG() - 平均值
    COUNT() - 计数
    MAX() - 最大值
    MIN() - 最小值
    SUM() - 求和

    # COUNT(*) AS cust_num, 对所有列进行计数的,但是只返回cust_num里的计数结果
    # COUNT(*)对所有进行计数,COUNT(column)对除掉NULL的列进行计数
    
    # 求客户数量
    SELECT COUNT(*) AS num_cust
    # 求有邮箱的客户数量
    SELECT COUNT(email) AS num_cust
    

    子查询

    不推荐

    SELECT cust_info
    
    FROM customers
    
    WHERE cust_id IN (
    
    SELECT cust_id
    
    FROM orders
    
    WHERE oder_num IN(
    
    SELECT order_num
    
    FROM orderitems
    
    WHERE prod_id = 'TNT2'));
    

    联结表

    从2个关系表中导出数据
    FROM products, vendors WHERE products.vend_id = vendors.vend_id

    INNOR JOIN...ON内部联结-上述的第二种写法
    FROM products INNER JOIN vendors ON products.vend_id = vendors.vend_id;

    自联结:把1个表别名成2个表
    SELECT p1.id, p1.name FROM products AS p1, products AS p2

    自然联结:关系表中有一样的列,通过表别名和筛选,使每个列只返回一次
    * 通配符只对c表使用,其他表的重复列没有被检索出来
    SELECT c*, o.order FROM customers AS c, orders AS o

    外部联结: LEFT OUTER JOIN...ON表示从左边的表中选择所有行
    SELECT customers.cust_id, orders.order_num FROM customers
    LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

    使用带聚集函数的联结:
    内部联结,表之间相等的行联结
    SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS ord_num FROM customers INNER JOIN orders
    ON customers_cust.id = orders.cust_id
    GROUP BY customers_cust.id;
    外部联结,表之间有不相关联的行联结
    SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS ord_num FROM customers LEFT OUTER JOIN orders
    ON customers_cust.id = orders.cust_id
    GROUP BY customers_cust.id;

    相关文章

      网友评论

          本文标题:mysql语句

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