目录
基本语句
对数据库、表的基本操作
#初始操作
net start mysql;
mysql -hlocalhost -uroot -p; # -h 连接服务器端口 -u 用户user
show databases;
show tables;
show create database db_name;
show create table table_name;
use database_name;
#对数据库
CREATE DATABASE database_name;
DELETE DATABASE database_name ;
#对表
CREATE TABLE table_name{ }
{
#括号内为字段信息
id INT NOT NULL,
name VARCHAR(255),
PRIMARY KEY ( id )
}
DROP TABLE table_name;
#插入数据
INSERT INTO VALUE(对应字段数据....)
#建表操作示例
CREATE TABLE `t_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`address` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `t_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`deptId` INT(11) DEFAULT NULL,
empno int not null,
PRIMARY KEY (`id`),
KEY `idx_dept_id` (`deptId`)
#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
)
ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
#插入
INSERT INTO t_dept(deptName,address) VALUES('华山','华山');
关键字 SELECT 选定
SELECT FROM结构
SELECT 字段1,字段2 ... FROM 表名
SELECT * FROM .... (*可以表示该表中的所有字段/列)
列的别名(以SELECT FROM为例)
三种方式:
1.SELECT field1 f1 FROM table;
2.SELECT field2 "f2" FROM table; (“ ”的写法可以带空格)
3.SELECT field3 AS "f3" FROM table;(AS实际是形式1 的省略)
关键字 DISTINCT 去重
SELECT DISTINCT field1 f1 FROM table;
#从table表里 选取f1列中不重复的数据。
只能放在开头。
(1.SELECT field1 f1 FROM table;1.SELECT field1 f1 FROM table;
如果 DISTINCT后 跟多个字段,就是去重掉多个字段不重复的。所以单个重复字段仍然会选定。)
显示表结构 DESC
DESCRIBE 或 DESC + table
显示表中字段的详细信息
过滤条件 WHERE
WHERE 一定要声明在FROM后面
SELECT * FROM table1 WHERE id = 90;
(mysql语言不严谨,和windows系统一样,字符串不区分大小写)
空值参与运算
空值:NULL。 空值不等于' ',0,'null'
空值参与运算,结果也为null。
(解决:利用 IFNULL关键字)
着重号 ' '
字段名称和关键字重复,用着重号表示。
查询常数
SELECT "常数",123,字段 FROM table1
这里的 常数 和 123 都是查询常数
运算符
1.算术运算符
+,-,*,/,%
一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;遇到非数值类型,sql首先对数据进行隐式转换,如果不能成功转换,视为0计算;
/ DIV ; % MOD
2.比较运算符
①加法运算符 = 与 <=>
= 判断等号两边的值、字符串或表达式是否相等,相等返回 1 ,不相等返回0。使用等号运算符时,遵循如下规则:1.如果等号两边的值、字符串或表达式都为字符串,则 MySQL 会按照字符串进行比较,其比较的 是每个字符串中字符的ANSI 编码是否相等。(UTF8 兼容ANSI码)2.如果等号两边的值都是整数,则 MySQL 会按照整数来比较两个值的大小。3.如果等号两边的值一个是整数,另一个是字符串,则 MySQL 会将字符串转化为数字进行比较。4.只要等号两边出现 NULL ,则比较结果为 NULL 。(通过过滤的条件为1,NULL意味着此数据被直接过滤。)<=>相比= 能够判断 NULL=NULL 的情况,返回1
②不等于 != / <>
数字之间的比较,用!= / <> 判断NULL 用关键字即可。
3.一些关键字
4.逻辑运算符
AND && ,OR || ,NOT !
AND的优先级高于OR!
5.位运算符
拓展
转义字符关键字 ESCAPE
转义即表示转义字符原来的语义,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。
需要在like语句中,对 通配符 _ 进行转义 示例:
转义前:
select * from user where username like '_hello';
转义后:
select * from user where username like '/_hello' escape '/';
正则表达式查询
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^b';
在fruits表中,查询f_name字段以字母‘y’结尾的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'y$';
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on';
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
mysql> SELECT * FROM fruits WHERE f_name like 'on'; Empty set(0.00 sec)
mysql> SELECT * FROM fruits WHERE f_name REGEXP '[ot]';
mysql> SELECT * FROM fruits WHERE s_id REGEXP '[456]';
mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}';