MySQL是c/s架构
第三方(图形化)工具:workbench Navicat SQlyog phpmyadmin

连接服务器配置信息:地址,端口号,用户名,密码
常见的数据库:mysql oracle sql_server
行:row    列:column

连接数据库:mysql -uroot -p密码
查看数据库仓库:show databases;
选择使用一个数据仓库:use mysql;
查看某有一个数据库中的数据表:showtables;
查看表的结构:desc user;

简单查询数据:
    select '字段名1',‘字段名2’
    from ‘表名称’;
查询所有信息:
    select  *
    from "表名称";
表的别名:
    select 别名.字段名
    from '表名' ‘ 别名’;

常量显示:
    select别名.字段,‘别名1’,‘别名2’
    from ‘表名’‘别名’;
去除重复数据(distinct);
    SELECT DISTINCT cs.cust_country
    FROM customers cs;
限定查询:
    SELECT cs.cust_city
    FROM customers cs
    WHERE cs.cust_address = 'abc';
SQL语句执行顺序:
from(数据来源)----where字句(根据条件筛选)---select字句(显示的字段)

关系运算符(>、>=、<、<=、=、不等于【<>、!=】);
    逻辑运算(and(逻辑与) 、or(逻辑或)、not(逻辑非));
    备注:java语言中,逻辑与(&、&&)、逻辑或(|、||)、逻辑非(!)
    与运算(and):全1为1,有0为0
    或运算(or):有1为1,全0为0
    非运算(not):取反运算,真为假,假为真

空值运算;
    is null(空)
    is not null (非空)
    not......is null

范围运算:
    in
    not in
    between......and(含边界值)
    between min and max(包含边界值)

模糊查询:
    like
    通配符(%,_)
    (%匹配任意多个任意字符),(_匹配1个任意字符)
    
mysql数据库查询条件默认不区分大小写

分页:
    select ‘字段1’,‘字段2’
    from ‘表名称’
    where ‘筛选条件’
    limit ‘分页设置’;
执行顺序;from--where--select--limit
limit n (n表示数量,默认从第一条数据开始;等价于limit 0,n)

limit n,m (n,表示起始位,m表示数量)

limit n offset m(表示从第m条开始的n条数量)

排序:(升序:asc,降序:desc)
语法:    select
    from
    where
    order by '字段1' asc|desc,'字段2' asc|desc
    limit

子查询:
查询出下订单的客户信息  
    SELECT pp.*
    FROM customers pp
    WHERE pp.cust_id in(
        SELECT DISTINCT cs.cust_id
        FROM orders cs)

    
多表查询:(内连接:等值连接,外连接:左外,右外)
等价值连接:from......where筛选条件
语法:    select 字段1,字段2,字段3
    from 表1,表2,表3
    where 表1.字段 = 表2.字段
    and 表2.字段 = 表3.字段

内连接的语法:from 表1 inner join 表2 on 筛选条件
可以省略inner

左外:from 表1 left join 表2 on 筛选条件
left join 与 left outer join 一样的(查询left join左边表名的所有数据)

右外:from 表1 right join 表2 on 筛选条件
(查询right join 右边表名的全部数据)

多表查询的运算
筛选出满足题意条件的数据(消除笛卡尔积)
where 筛选条件

分组&统计函数(聚合函数,分组函数)
分组之后进行筛选,需要使用having
语法:    select 字段1
    from 表1,表2
    where 分组之前的筛选
    group by  '分组的字段'
    having 分组后之后筛选
    order by '排序字段' desc|asc
    limit 分页
where字句之后,不能使用聚合函数

常用的统计函数:max(),min(),sum(),avg(),count()(表示统计null的值)

使用集合(union,union all)可以达到分组的效果
关于union:把多个SQL语句执行结果,合并为1张表
(所以每个sql的字段个事故必须一致)

union与union all 的区别:
union all不会去重,union会去除重复的数据


向表中插入数据(insert into),必须注意数据类型,数据长度,约束,防止插入数据错误
语法:    insert into 表名(字段名)
    values(值,与字段匹配)

插入全部字段的值:
    没有写字段名:
    INSERT INTO orders
    VALUES (20012,'2006-09-01 00:00:01',10004);
    写字段名:
    INSERT into orders         (order_num,order_date,cust_id)
    VALUES (20013,"2006-09-01 00:00:01",10006)
    
插入部分字段的值:(注意:只插入必填项的数据)
    INSERT INTO customers(cust_id,cust_name)
    VALUES (10007,'lwl')

一次性插入多条数据:
    INSERT INTO customers (cust_id,cust_name)
    VALUES (10008,'wyl'),(10009,'xl'),(10010,'vl'),(10011,"xx")


删除表中的数据(delete from)
(通常只删除自己构造的测试数据库,使用where来筛选自己的数据)
没有使用where,将删除整个表中的所有数据

删除部分数据:(例如)
    DELETE FROM customers
    where cust_id = 10010
    
    DELETE FROM customers
    where cust_id in (10011,10009,10008)

快速删除表中的所有数据:truncate 表名

修改表中的数据:(少了where的话,整个表中的所有数据行的相关字段都会被修改)
    update 表名
    set 修改的字段
    where 字段值(条件)

清空相关字段的值:(必填项的内容不能清空)
    UPDATE customers
    SET cust_city = NULL
    where cust_id = 10006;

管理数据库对象:(create,drop,alter)
新增数据库:create database 表名
删除数据表:drop database 表名
对数据表的操作:create table 表名(字段1 数据类型(数据长度 约束......))
 
快速新增表:(复制一张表格,含数据)
    CREATE TABLE customers_2 AS
    SELECT ps.*
    FROM orders ps;
    
    (复制一张表格,含数据)
    CREATE TABLE customers_2 AS
    SELECT ps.*
    FROM orders ps
    WHERE 1=2;
删除表格:drop table 表名称
修改表结构:alter table 表名称

导出数据库:
MySQLdump -uroot -p密码     
    
 

    
    



















03-07 09:22