Mysql-basic-1
2016-07-12 00:29
507 查看
数据库:数据库是以一定组织方式储存在一起的,能为多个用户共享的,具有尽可能小的冗余度的、与应用彼此独立的相互关联的数据集合。
Mysql:开源关系型数据库,LAMP组合成员
连接到MySQL服务器:
Mysql常用命令:
create table t_student (
id int,
stuname varchar(20),
stuage int,
stuaddress varchar(100),
primary key(id)
);
添加一列
alter table t_student add tel char(20);
删除一列
alter table t_student drop column tel;
添加唯一约束
alter table t_student add constraint uk_username unique(usercode);
添加主键约束
alter table t_user add constraint pk_t_user_id primary key t_user(id);
添加默认约束
alter table t_user alter password set default ‘123456’;
添加非null约束
alter table t_teacher modify column uname varchar(20) not null;
查询所有的列
SELECT * FROM vendors;
查询指定的列
SELECT vend_id,vend_name,vend_address,vend_city FROM vendors;
如果查询时需要显示表中的所有列,尽量避免使用通配符(*),而要采用写出所有列名的方式进行查询,
因为采用通配符查询会降低程序的查询性能。
去除重复记录
SELECT DISTINCT vend_id FROM products;
分页
SELECT * FROM products LIMIT 5;
SELECT * FROM products LIMIT 0,5;
SELECT * FROM products LIMIT 5,5;
排序(降序)
SELECT * FROM products ORDER BY prod_price DESC;
排序(升序)
SELECT * FROM products ORDER BY prod_price [ASC];
多列排序
SELECT * FROM products ORDER BY prod_price ASC,prod_name ASC;
查询产品价格在2到10之间的产品
SELECT * FROM products WHERE prod_price >= 2 AND prod_price <= 10;
SELECT * FROM products WHERE prod_price BETWEEN 2 AND 10;
查询产品价格不等于2.5的所有产品
SELECT * FROM products WHERE prod_price <> 2.5;
SELECT * FROM products WHERE prod_price != 2.5;
查询没有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NULL;
查询有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NOT NULL;
查询由供应商1001和1003制造并且价格在10元以上的产品
SELECT * FROM products WHERE vend_id = ‘1001’ OR vend_id = ‘1003’ AND prod_price > 10;
SELECT * FROM products WHERE (vend_id = ‘1001’ OR vend_id = ‘1003’) AND prod_price > 10;
SELECT * FROM products WHERE vend_id IN(‘1001’,’1003’) AND prod_price > 10;
查询不是由供应商1001和1003制造的产品
SELECT * FROM products WHERE vend_id NOT IN(‘1001’,‘1003’) ;
left()返回左边指定长度的字符
SELECT prod_name,LEFT(prod_name,2) FROM products;
right()返回右边指定长度的字符
SELECT prod_name,RIGHT(prod_name,5) FROM products;
length()返回字符串的长度
SELECT prod_name,LENGTH(prod_name) FROM products;
lower()将字符串转换为小写
SELECT prod_name,LOWER(prod_name) FROM products;
upper()将字符串转换为大写
SELECT prod_name,UPPER(prod_name) FROM products;
ltrim()去掉字符串左边的空格
SELECT prod_name,LTRIM(prod_name) FROM products;
rtrim()去掉串右边的空格
SELECT prod_name,RTRIM(prod_name) FROM products;
trim()去掉左右两边的空格
SELECT prod_name,TRIM(prod_name) FROM products;
字符串连接
SELECT CONCAT(‘I love ‘,cust_name) AS ‘Message’ FROM customers;
“`
时间日期函数:
聚合函数:
`• min()
• max()
• count()
• sum()
• avg()
聚合函数常用于统计数据使用
聚合函数统计时忽略值为NULL的记录
查询商品价格最高的产品
SELECT MAX(prod_price) FROM products;
查询商品价格最低的产品
SELECT MIN(prod_price) FROM products;
查询商品价格总和
SELECT SUM(prod_price) FROM products;
查询商品平均价格
SELECT AVG(prod_price) FROM products;
查询客户数量
SELECT COUNT(*) FROM customers;
SELECT COUNT(cust_email) FROM customers;
获取每个供应商提供的产品数量
SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;
获取提供产品数量大于2的供应商
SELECT vend_id,COUNT() FROM products GROUP BY vend_id HAVING COUNT() > 2;
HAVING语句用于GROUP BY的过滤
WHERE用于分组前过滤
获取产品提供产品数量大于等于2并产品价格大于10的供应商
SELECT vend_id,COUNT(*) FROM products WHERE prod_price > 10 GROUP BY vend_id HAVING
COUNT(*) >= 2;
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT`
Mysql:开源关系型数据库,LAMP组合成员
连接到MySQL服务器:
>mysql -uroot -proot [-h127.0.0.1]
Mysql常用命令:
显示MySQL中所有的数据库 > show databases; 切换到mydb数据库 > use mydb; 查看数据库中所有的表 > show tables; 查看表结构 > desc t_user; 查看数据库版本和时间 > select version(),now(); 创建数据库 >create database mydb; **``` 创建表:** `>create table t_student ( stuname varchar(20), stuage int, stuaddress varchar(100) );` 插入数据:> `insert into t_student (stuname,stuage,stuaddress) values ('tom',23,'郑州');` 查询表中数据: >select * from t_student; **声明主键:** 在设计表时总是要定义表的主键 • 表的主键设计策略 • 任意两行都不具备相同的主键值 • 每行都必须具有一个主键值(主键不允许Null列) • 主键和业务无关,不更改,不重用 • 主键可以是一个列或者是多个列的组合 • 使用PRIMARY KEY(XXX)来声明一个主键列 • 如果使用多个列作为主键则需要如下声明:PRIMARY KEY(XXX,XXX) **创建表时添加主键**:
create table t_student (
id int,
stuname varchar(20),
stuage int,
stuaddress varchar(100),
primary key(id)
);
**主键自动增长**: `AUTO_INCREMENT • 用来标示一个自动增长列 • 一个表中只允许有一个自动增长列 >create table t_student ( id int auto_increment, … );` **删除表**:`> drop table t_student;` **非null约束**:`stuname varchar(20) not null` **默认约束**:`stuaddress varchar(100) default '郑州'` **唯一约束**:`stuname varchar(20) not null unique` **更改表**:
添加一列
alter table t_student add tel char(20);
删除一列
alter table t_student drop column tel;
添加唯一约束
alter table t_student add constraint uk_username unique(usercode);
添加主键约束
alter table t_user add constraint pk_t_user_id primary key t_user(id);
添加默认约束
alter table t_user alter password set default ‘123456’;
添加非null约束
alter table t_teacher modify column uname varchar(20) not null;
**重命名表**:`>rename table t_student to t_stu` **导出数据库**:`>mysqldump -hlocalhost -uroot -proot mydb>C:/a.sql` **批量导入SQL脚本**:`source C:/a.sql` **运算符**:`逻辑运算符 • = 等于 • <>,!= 不等于 • < 小于 • > 大于 • <= 小于等于 • >= 大于等于 • between 在指定的两个值之间 关系运算符 • and • or • not` **update语句**:`>update t_student set stuname = 'Alex',age = '26' where id = 1;` **where语句**: `• where stuname = 'tom' • where stuname = 'tom' or stuname = 'alex' • where id > 1 and id < 3 • where id != 23 • where id = 12 or id = 34 • where id in (12,34) • where id between 12 and 34 • where password is null • where password is not null` **delete语句**:`>delete from t_student where id = 1;` **truncate**:> `truncate table t_student;` TRUNCATE TABLE用于删除表中的所有记录,但该语句不能包含WHERE语句,该操作运行速度比 DELETE语句快 **表设计三大范式**: *1. 确保每列的原子性 2. 在第一范式的基础上,确保每列都和主键相关 3. 在第二范式的基础上,确保每列都和主键直接相关,而不是间接相关* **基本查询**:
查询所有的列
SELECT * FROM vendors;
查询指定的列
SELECT vend_id,vend_name,vend_address,vend_city FROM vendors;
如果查询时需要显示表中的所有列,尽量避免使用通配符(*),而要采用写出所有列名的方式进行查询,
因为采用通配符查询会降低程序的查询性能。
去除重复记录
SELECT DISTINCT vend_id FROM products;
分页
SELECT * FROM products LIMIT 5;
SELECT * FROM products LIMIT 0,5;
SELECT * FROM products LIMIT 5,5;
排序(降序)
SELECT * FROM products ORDER BY prod_price DESC;
排序(升序)
SELECT * FROM products ORDER BY prod_price [ASC];
多列排序
SELECT * FROM products ORDER BY prod_price ASC,prod_name ASC;
**过滤查询**:
查询产品价格在2到10之间的产品
SELECT * FROM products WHERE prod_price >= 2 AND prod_price <= 10;
SELECT * FROM products WHERE prod_price BETWEEN 2 AND 10;
查询产品价格不等于2.5的所有产品
SELECT * FROM products WHERE prod_price <> 2.5;
SELECT * FROM products WHERE prod_price != 2.5;
查询没有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NULL;
查询有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NOT NULL;
查询由供应商1001和1003制造并且价格在10元以上的产品
SELECT * FROM products WHERE vend_id = ‘1001’ OR vend_id = ‘1003’ AND prod_price > 10;
SELECT * FROM products WHERE (vend_id = ‘1001’ OR vend_id = ‘1003’) AND prod_price > 10;
SELECT * FROM products WHERE vend_id IN(‘1001’,’1003’) AND prod_price > 10;
查询不是由供应商1001和1003制造的产品
SELECT * FROM products WHERE vend_id NOT IN(‘1001’,‘1003’) ;
**模糊查询**: `“ _”通配符代表一个字符 “ %” 通配符代表0个或一个或任意多个字符 查询产品名称中以jet开头的产品 > SELECT * FROM products WHERE prod_name LIKE 'jet%'; 查询_ ton anvil产品 > SELECT * FROM products WHERE prod_name LIKE '_ ton anvil' • 不要过度使用LIKE通配符,如果其他操作符可以完成就使用其他操作符 • 通配符搜索使用的时间比其他搜索的时间长 • 如果确实需要使用通配符,除非绝对有必要,否则不要把通配符放到WHERE子句的开始处,把通配 符放到搜索模式的开始处,搜索起来是最慢的 列的别名 > SELECT vend_id AS '供应商编号' FROM products; 算数运算 >SELECT quantity,item_price,quantity * item_price AS '总价' FROM orderitems; ` **文本处理函数:**
left()返回左边指定长度的字符
SELECT prod_name,LEFT(prod_name,2) FROM products;
right()返回右边指定长度的字符
SELECT prod_name,RIGHT(prod_name,5) FROM products;
length()返回字符串的长度
SELECT prod_name,LENGTH(prod_name) FROM products;
lower()将字符串转换为小写
SELECT prod_name,LOWER(prod_name) FROM products;
upper()将字符串转换为大写
SELECT prod_name,UPPER(prod_name) FROM products;
ltrim()去掉字符串左边的空格
SELECT prod_name,LTRIM(prod_name) FROM products;
rtrim()去掉串右边的空格
SELECT prod_name,RTRIM(prod_name) FROM products;
trim()去掉左右两边的空格
SELECT prod_name,TRIM(prod_name) FROM products;
字符串连接
SELECT CONCAT(‘I love ‘,cust_name) AS ‘Message’ FROM customers;
“`
时间日期函数:
聚合函数:
`• min()
• max()
• count()
• sum()
• avg()
聚合函数常用于统计数据使用
聚合函数统计时忽略值为NULL的记录
查询商品价格最高的产品
SELECT MAX(prod_price) FROM products;
查询商品价格最低的产品
SELECT MIN(prod_price) FROM products;
查询商品价格总和
SELECT SUM(prod_price) FROM products;
查询商品平均价格
SELECT AVG(prod_price) FROM products;
查询客户数量
SELECT COUNT(*) FROM customers;
SELECT COUNT(cust_email) FROM customers;
获取每个供应商提供的产品数量
SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;
获取提供产品数量大于2的供应商
SELECT vend_id,COUNT() FROM products GROUP BY vend_id HAVING COUNT() > 2;
HAVING语句用于GROUP BY的过滤
WHERE用于分组前过滤
获取产品提供产品数量大于等于2并产品价格大于10的供应商
SELECT vend_id,COUNT(*) FROM products WHERE prod_price > 10 GROUP BY vend_id HAVING
COUNT(*) >= 2;
**查询语句顺序**:1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT`
相关文章推荐
- mysql安装使用
- 一台机器同时装多个mysql(windows)
- mysql 主从配置(windows)
- ubuntu下安装mysql及卸载mysql方法
- ubuntu15.04 安装mysql可视化工具navicat
- mysql学习笔记
- Mysql CPU占用高的问题解决方法小结
- mysql索引总结----mysql 索引类型以及创建
- Mysql几种索引类型的区别及适用情况
- MySQL编程中的6个重要的实用技巧
- Mysql运行状态查询命令及调优详解
- mysql安装使用
- Mysql5.7启动不了又没报错的问题
- 11、mysql运算符----第2篇
- mysql数据损坏修复方法
- 6.28mysql
- mysql学习笔记之连接查询与子查询
- mysql启动
- mysql经典案例
- ERROR 2002 (HY000): Can't connect to local MySQL解决方法