mysql 开发基础系列1 表查询操作
在安装完数据库后,不管是windows 还是linux平台, mysql的sql命令都大同小异,相关命令都是相同的,每个命令结束后 都以 ; 结尾,
注意在windows平台中表名是不区分大小写的,在linux中是区分的。 例如tl1 与TL1在linux中是区分的。 为了一致所有的数据库名,表名,列名都采用小写。为了方便简单使用了sqllog客户端工具学习。
在安装完数据库后会出现的几个系统数据库:
Mysql 库: 该数据库存储了系统的用户权限信息
In_formation_schema库: 该数据库存储了一些数据库对象信息。比如用户表信息,列信息,权限信息,字符集信息,分区信息等。
Test库: 系统自动创建的测试数据库,任何用户都可以使用。
1. 切换数据库
USE test;
2. 查看该数据库下的表
SHOW TABLES;
3.删除数据库
DROP DATABASE test1;
4.创建表
基本语法是CREATE TABLE tableanme (column_name column_type CONSTRAINTS)
CREATE TABLE emp
(ename VARCHAR(10),
hiredate DATE,
sal DECIMAL(10,2),
deptno INT(2));
5.删除表
DROP TABLE emp;
6.修改表
-- 修改表类型, 将emp表ename字段从varchar(10)改为varchar(20)
ALTER TABLE emp MODIFY ename VARCHAR(20);
-- 再查看表架构
DESC emp;
-- 增加表字段
ALTER TABLE emp ADD COLUMN age INT(20);
-- 再查看表架构
DESC emp;
-- 删除表字段
ALTER TABLE emp DROP COLUMN age;
DESC emp;
-- 字段改名
ALTER TABLE emp CHANGE deptno deptno1 INT(2);
DESC emp;
-- 修改字段的排列顺序,添加字段birth 放在ename下面
ALTER TABLE emp ADD birth DATE AFTER ename;
DESC emp;
-- 修改sal字段排序,放在最前面
ALTER TABLE emp MODIFY sal DECIMAL(10,2) FIRST;
DESC emp;
7.修改表名
ALTER TABLE emp RENAME emp1;
8. 插入数据
INSERT INTO emp (ename,sal)VALUES('dony',1000);
-- 插入多条
INSERT INTO emp (ename,sal)
VALUES('dony01',1000),('dony02',1000);
9.更新
UPDATE emp SET sal=4000 WHERE ename='dony';
-- 更新两个表
UPDATE emp,emp1 SET emp.sal=3000, emp1.sal=3000 WHERE
emp.ename=emp1.ename
10.删除数据
DELETE FROM emp WHERE emp.ename='dony02';
11. 查询
-- 查询不重复记录 DISTINCT
SELECT DISTINCT * FROM emp;
-- 查询条件(比较运算符可以是=,>,<, >=,<=,!=)
SELECT * FROM emp WHERE sal >=3000;
-- 排序 ordery desc|asc
SELECT * FROM emp ORDER BY sal DESC;
-- 查询前1条
SELECT * FROM emp ORDER BY sal LIMIT 1;
-- 查询前3条,从第2条开始
SELECT * FROM emp ORDER BY sal LIMIT 1,3;
12. 聚合
常用的聚合函数sum(),count(*),max(),min() group by分类聚合, having 聚合后的结果进行过滤, with rollup 分类聚合后的结果进行汇总
-- 查询GROUP BY
SELECT ename,COUNT(1) FROM emp GROUP BY sal ;
-- with rollup
SELECT ename,COUNT(1) FROM emp GROUP BY sal WITH ROLLUP;
-- 查询 HAVING
SELECT ename,COUNT(1) FROM emp GROUP BY ename HAVING COUNT(1)>1;
13.表连接
内连接:两张表中相互匹配的记录,外连接选出不匹配的记录(外连接有分为左连接和右连接)
-- 内联接
SELECT * FROM dept,emp WHERE dept.`deptno`=emp.`deptno`;
-- 左联接
SELECT * FROM dept LEFT JOIN emp ON dept.`deptno`=emp.`deptno`;
-- 右联接
SELECT * FROM dept RIGHT JOIN emp ON dept.`deptno`=emp.`deptno`;
14.子查询
子查询的关键字主要包括in、not in、=、!=、exists、not exists
-- in 子查询
SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept);
-- 如果子查询记录数唯一,可以用=
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM dept LIMIT 1);
15. 记录联合
union 和union all, union 是将union all的结果集合并后在distinct
SELECT deptno FROM emp
UNION ALL
SELECT deptno FROM dept; SELECT deptno FROM emp
UNION
SELECT deptno FROM dept;
mysql 开发基础系列1 表查询操作的更多相关文章
- mysql 开发基础系列8 表的存储引擎
一. 表的存储引擎 1. 概述 插件式存储引擎是mysql数据库最重要的特性之一, 用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等.在mysql 5.0里支持的引擎包括: MyISAM, ...
- MySQL/MariaDB数据库的多表查询操作
MySQL/MariaDB数据库的多表查询操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单表查询小试牛刀 [root@node105.yinzhengjie.org.cn ...
- mysql 开发基础系列12 选择合适的数据类型(上)
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...
- mysql 开发基础系列11 存储引擎memory和merge介绍
一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm. 该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引, ...
- mysql 开发基础系列20 事务控制和锁定语句(上)
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...
- mysql 开发基础系列15 索引的设计和使用
一.概述 所有mysql 列类型都可以被索引,是提高select查询性能的最佳方法. 根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种引擎对每个表至少支持16个索引,总索引长度至少为256字 ...
- mysql 开发基础系列21 事务控制和锁定语句(下)
1. 隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...
- mysql 开发基础系列17 存储过程和函数(上)
一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...
- mysql 开发基础系列16 视图
一. 什么是视图视图是一种虚拟存在的表,行和列数据来自,定义视图的查询中使用的表,并且是在使用视图时动态生成的.优势有: 简单: 使用视图的用户完全不需要关心后面对应的表的结构,关联条件,筛选条件. ...
随机推荐
- SpringBoot处理日期转换问题
前台传一个datetime类型的数据即yyyy-MM-dd HH:mm:ss格式的数据黑后台controller,结果发现接收到的对象为yyyy-MM-dd 00:00:00,处理这个问题可以在con ...
- Java实现多线程生产者消费者模型及优化方案
生产者-消费者模型是进程间通信的重要内容之一.其原理十分简单,但自己用语言实现往往会出现很多的问题,下面我们用一系列代码来展现在编码中容易出现的问题以及最优解决方案. /* 单生产者.单消费者生产烤鸭 ...
- 小程序跳转tabbar页面
如果在app.json 配置tabbar 的时候配置了 跳转的页面的链接: 在其余的子页面,设置用navigator 进行跳转会发现 在tabbar 设置过的页面无法进行跳转,这时需要在navigat ...
- 构造 this super
构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...
- Django之发送邮件
Django的发送邮件是基于django的一个组件进行操作的,EmailMessage 基本使用方法: def send_html_mail(subject, html_content, from_a ...
- android与php使用base64加密的字符串结果不一样解决方法
base64将字符串转换为字节得到同一个值 一.错误 String signString = Base64.encodeToString(signContent.getBytes(),Base64.N ...
- oracle 索引移动到不同的分区
最近系统空间不够,要进行数据库清理,truncate数据之后,发现数据不连续,导致这个表空间占用巨大,想过使用shrink.move.但是shrink得效率比较慢,选择了move.语句大概如此: SE ...
- UE4行为树
这是 UE4中行为树编辑器 中可用的默认节点.取决于开发项目的不同(如射击游戏),可能会有更多节点.这里介绍五种行为树节点类型: 节点类型 描述 Composite(流程控制节点) 这种节点定义一 ...
- java中super(),与构造方法链(constructor chaining)
public class Apple extends Fruit { } class Fruit{ public Fruit(String name){ System.out.println(&quo ...
- usb 枚举流程
Linux-USB总线驱动分析 如下图所示,以windows为例,我们插上一个没有USB设备驱动的USB,就会提示你安装驱动程序 为什么一插上就有会提示信息? 是因为windows自带了USB总线驱动 ...