总结16 SQL数据库应用概念与SQL数据库语法.
SQL软件 Mysql 的应用命令
1.启动mysql服务:net start 数据库服务名 列如:net start mysql51
2.登录本机Mysql命令:mysql -u帐户 -p密码
3.登陆远程Mysql命令:mysql -h地址IP -u帐户 -p密码
4.退出Mysql命令:exit/quit
5.开启远程访问权限:GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
字符集在数据库中的意义
字符集也可以称之为数据库所用的编码.如utf-8或gbk,目的是为了防止乱码.
SQL语法与方言和大小写
SQL语法是通用的,不仅仅可以用于Mysql,也可以用于微软的ServerSql等其它SQL数据库软件
不过,各个SQL软件也有自己的一些[方言],Mysql同样也有自己的[方言],但这些都不是标准的SQL语法,因此建议何时何地都要用[标准的SQL]语法.
而在Mysql软件中,关键字是可以小写的.而在有些其它软件中,关键字仅支持大写.
格式如:CREATE DATABASE IF NOT EXISTS 数据库名称;
注意:在工具,‘SQLyog’中,如果不在每条语句的末尾加上分号’;’,那么尽管当行缺少分号的语法命令可以执行,但当下一行命令执行其它命令时则会报错
SQL的语法分类
SQL语法分为4大类
- DDL (Data Definition Language) 数据定义语言 用于定义[数据库],[表],[列].关键字 CREATE,DROP,ALTER等
2) DML 常用! (Data Manipulation Language)数据操纵语言,用于对表的[行数据]进行[增],[删],[改]. 关键字INSERT,DELETE,UPDATE等
3) DQL 常用! (Data Query Language)数据查询语言 用来查询表中的[行数据],关键字SELECT,WHERE等 - DCL (Data Control Language)数据控制语言,用于定义数据库的访问权限,安全级别,创建用户等. 关键字GRANT REVOKE等
关于称谓
在数据库中,对于表示数据属性的名词,有叫做<字段>,有叫做<列名>.本文章以"列名"做称谓.
一.DDL操作之 操作数据库
用于定义[数据库],[表],[列]
查询
1.查询所有数据库的名称:SHOW DATABASES;
2.查询某个数据库的字符集,查询某数据库的创建语句:SHOW CREATE DATABASE 数据库名称;
创建
方式1.创建数据库:CREATE DATABASE 数据库名称;
方式2.先判断数据库是否存在,如果不存在则创建:CREATE DATABASE if not exists 数据库名称;
方式3.创建数据库,并指定其字符集:CREATE database 数据库名称 character set 字符集名;
SQL语法组合式练习 — 创建数据库,判断是否存在,并在同一行为其指定’gbk’字符集:
CREATE database if not exists 数据库名 character set gbk;
修改
修改某个数据库的字符集:ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
删除
方式1:删除数据库:DROP DATABASE 数据库名称;
方式2:先判断数据库是否存在,如果存在则删除:DROP database if exists 数据库名称;
使用
查询当前正在用的数据库名:select database();
切换到要使用数据库:use 数据库名;
一/二 DDL操作之 操作表
创建
1.创建表,为其表定义列名和列明存储数据所用的数据类型.:
create table 自定义表名(
自定义列名1 自定义列名的数据类型,
自定义列名2 自定义列名的数据类型,
自定义列名3 自定义列名的数据类型
);
注意:只要不是最后一个列名,结尾都要加逗号’,’.而最后一个列名则不可以加上逗号’,'
列如:
create table person(
ID int,
Name varchar(20),
Age int,
Address varchar(80)
);
2.也可以在表中添加新的列:ALTER TABLE 表名 add 自定义列名 自定义数据类型;
列的数据类型分类与格式:
1.整数
tinyInt 微整型:很小的整数(占 8 位二进制)
smallint 小整型:小的整数(占 16 位二进制)
mediumint 中整型:中等长度的整数(占 24 位二进制)
int(integer) 整型:整数类型(占 32 位二进制)
2.日期
float 单精度浮点数,占 4 个字节 小数
double 双精度浮点数,占 8 个字节
time 表示时间类型
date 表示日期类型
datetime 同时可以表示日期和时间类型
3.字符串
char(m) 固定长度的字符串,无论使用几个字符都占满全部,M 为 0~255 之间的整
数
varchar(m) 常用! 可变长度的字符串,使用几个字符就占用几个,M 为 0~65535 之间的整数
4.大二进制
tinyblob Big Large Object 允许长度 0~255 字节
blob 允许长度 0~65535 字节
mediumblob 允许长度 0~167772150 字节
longblob 允许长度 0~4294967295 字节
5.大文本
tinytext 允许长度 0~255 字节
查询
1.查询当前数据库中所有的表:SHOW TABLES;
2.查询某个表的结构:DESC 表名;
3.查询创建该表时所用的SQL语句和字符集编码信息:SHOW CREATE TABLE 表名;
修改
1.复制一个结构完全相同的表:CREATE TABLE 自定义新表名 LIKE 要被复制的表名;
2.修改表的字节集(编码):ALTER TABLE 表名 CHARACTER SET 字符集名称;
3.修改某个列的名称和数据类型:ALTER TABLE 表名 CHANGE 欲修改的目标列名 新的自定义列名 新的数据类型;
4.仅修改某个列的数据类型:ALTER TABLE 表名 MODIFY 欲被修改的目标列名 新的数据类型;
5.仅修改某个列名:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
删除
1.删除某个表:DROP TABLE 表名;
2.判断表是否存在,存在则删除:DROP TABLE IF EXISTS 表名;
3.删除某个列:ALTER TABLE 表名 DROP 欲删除的列名;
二.DML操作 操作[表中数据]
用于操作[表中的数据],有增,删,改等…
非常常用!多记好!
添加
1.给某个表的列添加对应的数据:INSERT INTO 表名(列名1,列名2,列名3,等多个列名) values(对应值1,对应值2,对应值3,等多个对应值);
2.不去定义列名,直接对列添加数据
INSERT INTO 表名 VALUES(对应值1,对应值2,对应值3,等多个对应值);
注意:
1.列名顺序和对应值的顺序要一致,其逻辑和JAVA中调用重载方法时填写的形参逻辑是一样的.
2.如果是字符数据,则要加上双引号或单引号,
如:INSERT INTO person(ID,NameChinese,Age,Address,Number) VALUES (5,"李贞贤",17,'河南',1023);
3.在SQLyog中,当列名同关键字一样是,如’NAME’,那么将会被SQLyog误以为是关键字,此时会变成大写成为蓝色字,不用担心,不影响使用…
删除
DELETE FROM 表名 [where 条件表达式]
1.删除符合条件的表数据:DELETE FROM 表名 WHERE 列名和表达式
列如:DELETE FORM person WHERE ID=1; 意思:删除’ID’列的值为’1’的整行数据.
列如:DELETE FROM person WHERE Age>16; 意思:删除’Age’列的值大于’16’的整行数据;
2.删除表中的全部数据(慎重!):
DELETE FROM 表名;
注意:当一个没有带WHERE条件表达式的删除语句被执行后,则默认删除表中的所有数据,因此要谨慎,避免因语法出错造成不可挽回的损失!
3.删除表的本身,也就是删除表的结构(慎重!):
TRUNCATE TABLE 表名;
修改
UPDATE 表名 SET 列名=对应值 [WHERE 条件表达式]
1.修改符合条件的表数据为指定的数据:
UPDATE 表名 SET 列名=对应值 WHERE 列名和表达式;
作用:当’WHERE’后面的条件表达式符合条件时,则执行’WHERE’前面的修改操作.
如:UPDATE person SET NameChinese=“合格” WHERE Age<20;
意思:对其表中所有’Age’列名的值小于’20’的数据.将其列名’NameChinese’的值改为’合格’.
如:update student set age=26, address=‘北京’ where id=3;
意思:一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京
三.DQL查询之基本式查询
1.查询表中的所有数据:
SELECT * FROM 表名;
2.多列名查询
格式1:
SELECT 列名1,列名2,列名3等多个列名 FROM 表名;
释意:查询表中多个指定列名表格的数据
列如:SELECT NAME,age,address FROM student3;
3.关键字:DISTINCT 去除重复
格式1:
SELECT DISTINCT 列名 FROM 表名;
释意:查询指定列名中的数据,并去除该列名中存在重复的表格数据.
列如:SELECT DISTINCT math FROM student3;
格式2:
SELECT DISTINCT 列名1,列名2等多个列名 FROM 表名;
释意:查询多个指定列名中的数据,并自动去除多个列名间存在重复的表格数据.
注意:只有在列名1和列名2等全部列名都遇到相同的数据下才会过滤掉.如列名1为姓名,列名2为性别,当两个列名的数据都为’马化腾’和’男’时才会对其过滤掉.
4.关键字:±*/%运算符
格式1:
SELECT 要参与运算的int型列名1 运算符 要参与运算的int型列名2 FROM 表名;
释意: 通过运算符表达并计算多个列名数据的数值,并得出结果,数据类型多为int型,强调列名下的数据运算.
列如:SELECT math+english FROM student3;
意思:单单列出存放运算结果的列.
格式2:
SELECT 列名1,列名2,列名3,要参与运算的int型列名1 运算符 要参与运算的列名2 FROM 表名;
列如:SELECT NAME,math,english,math+english FROM student3;
意思:不仅列出存放运算结果的列,还列出其它列.
注意:如果有任何一个数据为Null的列名参与到运算,那么计算结果也将视为Null;
列如:name math+english
柳青 (NULL)
5.关键字:AS 为计算列起别名
为用于表达计算结果的列名起别名
详解:当两个或多个的列名数据进行运算后,用于表示运算结果的列名格式默认为’列名1列名2;.当想要更改默认列名时,则需要用到AS关键字.
注意:关键字’AS’可以省略,但不推荐这样做,一切还是要以标准语法来.
格式:
SELECT 要参与运算的int型列名1 运算符 要参与运算的int型列名2 AS 自定义别名 FROM 表名;
列如:SELECT NAME,math+english AS 总计成绩 FROM student3;
三/二.DQL查询之条件式查询
SELECT * FROM 表名 [WHERE 条件表达式]
1. _+*/% 运算符查询
格式:
SELECT * FROM 表名 WHERE 列名和表达式;
列如:
SELECT * FROM student3 WHERE age<40;
意思:查询’student3’表中,'age’列名里所有数据小于数值’40’的.
列如:SELECT * FROM student3 WHERE age>=40; 意思:查询’student3’表中,'age’列名里所有数据大于或等于数值’40’的.
2.'并且’条件式查询
分为三个语法格式
[1]AND
[2]BETWEEN 范围1 AND 范围2 /
[3] &&
作用类似Java的’&&’.
1.[AND]格式(和’’&&’'格式只有字符的区别):
SELECT * FROM 表名 WHERE 条件表达式1 AND 条件表达式2;
列如:SELECT * FROM student3 WHERE math>=50 AND math<=80;
意思:查询表中,列名’math’的数值大于等于50,且小于等于80的数据.
列如:SELECT * FROM student3 WHERE math>=50 AND english<=70;意思:
查询表中,列名’math’的数值大于等于50,且列名’english’小于等于70的数据.
2.[BETWEEN 范围1 AND 范围2]格式:
SELECT * FROM 表名 WHERE 列名 BETWEEN 最小范围 AND 最大范围;
列如:SELECT * FROM student3 WHERE age BETWEEN 40 AND 70; 意思:查询表中,'age’列中,数值在’40’到’70之间的数据,其中包括’40’和’70’.
3.原始的[&&]格式(和’AND’格式只有字符的区别):
SELECT * FROM 表名 WHERE 条件表达式1 && 条件表达式2;
列如:SELECT * FROM student3 WHERE math>=20 && english<=90;
3.'或者’条件式查询
分为2个语法格式:
[1]条件表达式 OR 条件表达式
[2] IN(条件,条件)
表示’或’,类似于JAVA的’||'
1.[条件表达式 OR 条件表达式]格式:
SELECT * FROM 表名 WHERE 条件表达式1 OR 条件表达式2 OR 条件表达式3;
列如:SELECT * FROM student3 WHERE age=55 OR age=20 OR math=99; \意思:
查询表中列名’age’中数值为’55’或为’20’的,或者列名’math’中数值为’99’的.
2.[IN]格式
格式1:
SELECT * FROM 表名 WHERE 列名 IS 关键字;
意思:查询某列名数据为其关键字的数据,比如关键字为’NULL’(空),则为查询某列名数据为空的数据.
列如:SELECT * FROM student3 WHERE english IS NULL;
格式2:
SELECT * FROM 表名 WHERE 列名 IS NOT 关键字;
意思:查询某列名数据[不为]其关键字的数据,比如关键字不为’NULL’,则表示列出该列名数据中不为’NULL’关键字的数据.
列如:SELECT * FROM student3 WHERE english IS NOT NULL;
三/四.DQL查询之模糊式查询
SELECT * FROM 表名 WHERE 列名 LIKE ‘通配符字符串’;
DQL查询中的[模糊查询]在开发中使用频率极高,应该重点掌握.
模糊查询的特点类似于正则表达式,其中括号内的字符串称之为[通配符字符串].
通配符1: %
意思:表示从所处位置的长度开始,匹配一切字符串,且长度不限. 也称之为:匹配任意多个字符串
通配符’%'的格式:
SELECT * FROM 表名 WHERE 列名 LIKE "%通配符";
列如:SELECT * FROM student3 WHERE NAME LIKE “%德%”;
意思:查看表中’name’列名中所有含有’德’字的数据.
列如:SELECT * FROM student3 WHERE NAME LIKE “马%”;
意思:查看’name’列名中所有以’马’字开头的数据,也就是说匹配’马’姓的数据.
通配符2: _
意思:表示在所处的位置匹配一个(’_'符号有几个就匹配几个)长度为1的字符. 也称之为:匹配一个字符
通配符’_'的格式:
SELECT * FROM 表名 WHERE 列名 LIKE "_通配符";
列如:SELECT * FROM student3 WHERE NAME LIKE “___”;
意思:查看’name’列名中,为三个字符的数据.即:查看所有三个名字的数据.
列如:SELECT * FROM student3 WHERE NAME LIKE “_化%”;
意思:查看’name’列名中,所有第二个字符为’化’的数据.即:名字第二个字是"化"的人.