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密码