zoukankan      html  css  js  c++  java
  • MySQL基本语法学习笔记

    创建和删除数据库 CREATE DROP DATABASE

    CREATE DATABASE db_name;
    DROP DATABASE db_name;
    

    创建数据库表 CREATE TABLE

    CREATE TABLE tb_t3 (
      id INT(11) ,
      name VARCHAR(25)
    );
    

    使用主键约束的两种形式 PRIMARY KEY

    //直接再定义列同时指定主键
    CREATE TABLE tb_t3 (
      id INT(11) PRIMARY KEY,
      name VARCHAR(25)
    );
    
    //在定义完所有列之后指定主键
    CREATE TABLE tb_t3 (
      id INT(11) ,
      name VARCHAR(25),
      PRIMARY KEY (id)
    );
    
    //主键由多个字段联合组成
    CREATE TABLE tb_t3 (
      id INT(11) ,
      name VARCHAR(25),
      PRIMARY KEY (id,name)
    );
    

    使用外键约束 FOREIGN KEY

    外键用来在两个表的数据之间建立连接,可以是一列或者多列。

    外键:首先它是表中的一个字段,虽可以不是本表的主键,但要对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。

    
    CREATE TABLE tb_emp5(
    
     id	INT(11) PRIMARY KEY,
    
     name	VARCHAR(22) ,
    
     deptId INT(11),
    
     CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFRERNCES tb_dept1(id)
    
    );
    
    //以上语句执行成功之后,在表tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id。
    
    

    字段值非空约束 NOT NULL

    
    CREATE TABLE tb_t3 (
      id INT(11)  NOT NULL,
      name VARCHAR(25),
      PRIMARY KEY (id)
    );
    
    
    
    

    字段值唯一性约束两种方式 UNIQUE

      id INT(11)  UNIQUE,
      name VARCHAR(25),
      PRIMARY KEY (id)
    );
    
    
    
    CREATE TABLE tb_dept3 
    
    (
    
    id   INT(11) PRIMARY KEY,
    
    name  VARCHAR(22),
    
    location VARCHAR(50),
    
    CONSTRAINT STH UNIQUE(name)
    
    );
    
    

    指定字段默认值 DEFAULT

    
    // deptId 默认值为1111
    
    CREATE TABLE tb_emp7 
    
    (
    
    id   INT(11) PRIMARY KEY,
    
    name  VARCHAR(25) NOT NULL,
    
    deptId INT(11) DEFAULT 1111, 
    
    salary FLOAT
    
    );
    
    

    指定字段值自增 AUTO_INCREMENT

    
    CREATE TABLE tb_emp8 
    
    (
    
    id   INT(11) PRIMARY KEY AUTO_INCREMENT,
    
    name  VARCHAR(25) NOT NULL,
    
    deptId INT(11), 
    
    salary FLOAT
    
    );
    
    

    使用DESCRIBE和DESC查看表结构

    
    DESC tb_emp1;
    
    DESCRIBE tb_dept1;
    
    

    修改表名、表结构 ALTER TABLE

    修改表名 ALTER TABLE RENAME

    
    //将数据表tb_dept3改名为tb_deptment3。
    
    ALTER TABLE tb_dept3 RENAME tb_deptment3;
    
    

    修改表中的字段数据类型、调整字段位置 ALTER TABLE MODIFY

    
    //将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。
    
    ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);
    
    //将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:
    
    ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;
    
    //将数据表tb_dept1中的column1字段插入到location字段后面,SQL语句如下:
    
    ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER location;
    
    
    
    

    修改表中字段名称 ALTER TABLE CHANGE

    
    //将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:
    
    ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
    
    

    在数据库表中添加新字段 ALTER TABLE ADD

    
    //在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId(部门经理编号),SQL语句如下:
    
    ALTER TABLE tb_dept1 ADD managerId INT(10);
    
    //在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:
    
    ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;
    
    //在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下:
    
    ALTER TABLE tb_dept 1ADD column2 INT(11) FIRST;
    
    //在数据表tb_dept1中name列后添加一个INT类型的字段column3,SQL语句如下:
    
    ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name;
    
    

    删除中表中指定字段 ALTER TABLE DROP

    
    //删除数据表tb_dept1表中的column2字段。
    
    ALTER TABLE tb_dept1 DROP column2;
    
    

    MySQL中的数据类型

    整型

    img
    img

    浮点数

    img

    日期时间

    img

    文本字符串

    img

    二进制字符串

    img

    查询语句

    img

    查询表中所有列数据、查询指定列数据 SELECT FROM

    
    //从fruits表中检索所有字段的数据,SQL语句如下:
    
     SELECT * FROM fruits;
    
    //查询fruits表中f_name列所有水果名称,SQL语句如下:
    
    SELECT f_name FROM fruits;
    
    

    查询时加上指定条件 SELECT FROM WHERE IN (NOT IN ) (BETWEEN AND) (NOT BETWEEN AND) LIKE

    
    //查询价格为10.2元的水果的名称,SQL语句如下:
    
    SELECT f_name, f_price
    
    FROM fruits
    
    WHERE f_price = 10.2;
    
    //s_id为101和102的记录,SQL语句如下:
    
    SELECT s_id,f_name, f_price 
    
    FROM fruits 
    
    WHERE s_id IN (101,102) 
    
    ORDER BY f_name;
    
    //查询所有s_id不等于101也不等于102的记录,SQL语句如下:
    
    SELECT s_id,f_name, f_price
    
    FROM fruits
    
    WHERE s_id NOT IN (101,102)
    
    ORDER BY f_name;
    
    //查询价格在2.00元到10.20元之间的水果名称和价格,SQL语句如下:
    
    SELECT f_name, f_price 
    
    FROM fruits WHERE f_price
    
    BETWEEN 2.00 AND 10.20;
    
    //查询价格在2.00元到10.20元之外的水果名称和价格,SQL语句如下:
    
    SELECT f_name, f_price
    
    FROM fruits 
    
    WHERE f_price NOT BETWEEN 2.00 AND 10.20;
    
    //查找所有以’b’字母开头的水果,SQL语句如下:
    
    SELECT f_id, f_name
    
    FROM fruits
    
    WHERE f_name LIKE 'b%';
    
    //在fruits表中,查询f_name中包含字母’g’的记录,SQL语句如下:
    
    SELECT f_id, f_name
    
    FROM fruits
    
    WHERE f_name LIKE '%g%';
    
    //查询以’b’开头,并以’y’结尾的水果的名称,SQL语句如下:
    
    SELECT f_name
    
    FROM fruits
    
    WHERE f_name LIKE 'b%y';
    
    

    查询时指定NULLNOT NULL 条件

    
    //查询customers表中c_email为空的记录的c_id、c_name和c_email字段值,SQL语句如下:
    
    SELECT c_id, c_name,c_email FROM customers WHERE c_email IS NULL;
    
    //查询customers表中c_email不为空的记录的c_id、c_name和c_email字段值,SQL语句如下:
    
    SELECT c_id, c_name,c_email FROM customers WHERE c_email IS NOT NULL;
    
    

    查询时指定字段的值不能重复 DISTINCT

    
    //查询fruits表中s_id字段的值,返回s_id字段值且不得重复,SQL语句如下:
    
    SELECT DISTINCT s_id FROM fruits;
    
    

    查询时按照指定字段升降序排序 默认升序,DESC为降序

    
    //查询fruits表,先按f_price降序排序,再按f_name字段升序排序,SQL语句如下:
    
    SELECT f_price, f_name FROM fruits ORDER BY f_price DESC, f_name;
    
    

    分组查询 GROUP BY

    
    //根据s_id对fruits表中的数据进行分组,SQL语句如下:
    
    SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;
    
    //根据s_id对fruits表中的数据进行分组,将每个供应商的水果名称显示出来,SQL语句如下:
    
    SELECT s_id, GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;
    
    //根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息,SQL语句如下:
    
    SELECT s_id, GROUP_CONCAT(f_name) AS Names 
    
    FROM fruits 
    
    GROUP BY s_id HAVING COUNT(f_name) > 1;
    
    

    内连接查询 INNER JOIN ON

    
    //fruits表和suppliers表中都有相同数据类型的字段s_id,两个表通过s_id字段建立联系。接下来从fruits表中查询f_name、f_price字段,从suppliers表中查询s_id、s_name,SQL语句如下:
    
     SELECT suppliers.s_id, s_name,f_name, f_price
    
       FROM fruits ,suppliers
    
       WHERE fruits.s_id = suppliers.s_id;
    
    //在fruits表和suppliers表之间,使用INNER JOIN语法进行内连接查询,SQL语句如下:
    
     SELECT suppliers.s_id, s_name,f_name, f_price
    
       FROM fruits INNER JOIN suppliers
    
       ON fruits.s_id = suppliers.s_id;
    
    

    外连接 LEFT JOIN左连接

    左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。

    
    //在customers表和orders表中,查询所有客户,包括没有订单的客户,SQL语句如下:
    
     SELECT customers.c_id, orders.o_num
    
       FROM customers LEFT OUTER JOIN orders
    
       ON customers.c_id = orders.c_id;
    
    

    外连接 RIGHT JOIN右连接

    右连接是左连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。

    
    //在customers表和orders表中,查询所有订单,包括没有客户的订单,SQL语句如下:
    
     SELECT customers.c_id, orders.o_num
    
       FROM customers RIGHT OUTER JOIN orders
    
       ON customers.c_id = orders.c_id;
    
    

    子查询 ANY SOME ALL EXISTS IN

    子查询指一个查询语句嵌套在另一个查询语句内部的查询

    
    //返回tbl2表的所有num2列,然后将tbl1中的num1的值与之进行比较,只要大于num2的任何1个值,即为符合查询条件的结果。
    
    SELECT num1 FROM tbl1 WHERE num1 > ANY (SELECT num2 FROM tbl2);
    
    //返回tbl1表中比tbl2表num2 列所有值都大的值,SQL语句如下:
    
    SELECT num1 FROM tbl1 WHERE num1 > ALL (SELECT num2 FROM tbl2)
    
    //查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中的记录,SQL语句如下:
    
     SELECT * FROM fruits
    
       WHERE EXISTS
    
       (SELECT s_name FROM suppliers WHERE s_id = 107);
    
    

    合并查询结果 UNION (UNION ALL)将多个SELECT语句的结果组合成一个结果集合

    使用UNION ALL包含重复的行,在前面的例子中,分开查询时,两个返回结果中有相同的记录。UNION从查询结果集中自动去除了重复的行,如果要返回所有匹配行,而不进行删除,可以使用UNION ALL。

    
    //查询所有价格小于9的水果的信息,查询s_id等于101和103所有的水果的信息,使用UNION连接查询结果,SQL语句如下:
    
    SELECT s_id, f_name, f_price 
    
    FROM fruits
    
    WHERE f_price < 9.0
    
    UNION ALL
    
    SELECT s_id, f_name, f_price 
    
    FROM fruits
    
    WHERE s_id IN(101,103);
    
    

    正则表达式查询 REGEXP

    
    SELECT * FROM fruits WHERE f_name REGEXP '^b';
    
    

    img

    插入数据 INSERT INTO

    
    INSERT INTO table_name (column_list) VALUES (value_list);
    
    

    更新数据 UPDATE

    
    UPDATE table_name 
    
    SET column_name1 = value1,column_name2 = value2
    
    WHERE (condition);
    
    

    删除数据 DELETE

    
    DELETE FROM table_name [WHERE<condition>];
    
    
  • 相关阅读:
    为了博多
    [JSOI2008]星球大战starwar
    【网络流24题】最小路径覆盖问题
    【中学高级水题本】关路灯
    【网络流24题】分配问题
    【网络流24题】方格取数问题
    【网络流24题】汽车加油行驶
    [洛谷P2057][bzoj1934]善意的投票(最大流)
    LeetCode(38) Count and Say
    LeetCode(36)Valid Sudoku
  • 原文地址:https://www.cnblogs.com/cloud9527/p/13064455.html
Copyright © 2011-2022 走看看