SQL语言
SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
建立表语句:
CREATE TABLE TABLENAME (COL_NAME1 TYPE,COL_NAME2 TYPE,......);
常用TYPE说明:
int 整数
char(length) 定长字符串,短于指定长度用空格填充
varchar(length) 变长字符串
如:CREATE TABLE table1 (name varchar(100),sex varchar(20),age int,class varchar(100));创建了一个表为table1,表头为name,sex,age,calss
CREATE TABLE 语句同时创建一个序列的例子,并且带主键
CREATE TABLE table2 (ID int(10) NOT NULL auto_increment,NAME VARCHAR(20),AGE INT,PRIMARY KEY(ID));(带主键的ID)
插入数据语句:
INSERT INTO TABLENAME (COL_NAME1 TYPE,COL_NAME2 TYPE,......) VALUES (VAL1,VAL2,.......);
向表插入一行数据,前面指定列名,后面是要插入的值。记:SQL语句中的字符串是使用单引号。
在实际中向表中添加数据不可能是一行一数据的敲进去,若是有个万把行,那能累死。所以要使用脚本将文本内容插入数据库中。
使用脚本将文本内容插入数据库步骤:
1.首先建立一个文本文件,如my.sql(后缀名为.sql),并设置字符集为utf8
2.打开数据库如:mysql -u dbuser1 -p
3.使用哪个数据库,如:use db1;
4.设置字符集:set names utf8;
5.使用此脚本:source my.sql;
查询数据语句:关键
SELECT * FROM TABLENAME:表示查询指定表的所有字段
若想查询某一字段的数据如下:
SELECT COL_NAME1,COL_NAME2,... TABLENAME;表示查询指定表中的指定字段
返回指定行数的SELECT查询数据语句:LIMIT字句的语法
SELECT * FROM TABLENAME LIMIT m,n;其中m代表记录开始的index,从0开始,表示第一条记录,n是指从第m+1条开始,取n条。
SELECT * FROM TABLENAME LIMIT 0,7;
SELECT * FROM TABLENAME LIMIT 3,4;
带有条件的查询语句:WHERE语句的用法
SELECT * FROM TABLENAME WHERE CONDITIONAL;CONDITIONAL表示查询条件,条件可以做逻辑判断组合
如:SELECT * FROM table1 WHERE age = 20 AND name = '张三';
AND----与 LIKE-----通过"%"通配符匹配指定模式
NOT-----非 IN------包含子集
<=-------小于等于 OR-----或
<>-------不等于 >--------大于
=---------等于 <--------小于
select * from table1 where age in(20,25,29);in表示子集即:在年龄段集合中找为20,25,29的人
select * from table1 where age not in(20,25,29);in表示子集即:在年龄段集合中找不为20,25,29的人
select * from table1 where name not like '王%';查找不姓王的数据
select * from table1 where name like '王%';查找表中姓王的数据
select * from table1 where name like '%王';查找表中姓名中含有王字的数据
别名:
列别名:SELECT FIELDNAME ALIAS FROM TABLENAME;
标别名:SELECT ALIAS.FIELDNAME FROM TABLENAME ALIAS;
例如:select name 姓名 from table1;将表中列名为name该名为姓名
select a.name from table1 a;将表table1改名为a,a.name代表查询table1中的name的数据
聚合函数:
SUM ([ DISTINCT ] FIELDNAME) 求指定列之和,[DISTINCT]选项表示剔除重复记录
例如:select sum(age) from table1;求table1中数据的年龄之和
select sum([distinct] age) from table1;求table1中年龄不重合的和
MAX ([ DISTINCT ] FIELDNAME),求指定列的最大值
如:select max(age) from table1;
MIN ([ DISTINCT ] FIELDNAME),求指定列的最小值
COUNT ([ DISTINCT ] FIELDNAME),求指定列的记录总数
AVG ([ DISTINCT ] FIELDNAME),求指定列的平均值
练习:
查询表中年龄最大人的姓名信息:select name from table1 where age = (select max(age) from table1);
GROUP BY子句:
将查询结果根据指定字段分组
GROUP BY fieldname [DESC] 如:select name from table1 group by classid;
ORDER BY子句:
将查询结果根据字段排序
ORDER BY fieldname [DESC] 如:select name from table1 order by classid desc;desc代表从小到大
多表查询(前提是表之间是有关联数据的)
如:select * from table1,table2 where table1.age = table2.age;
练习1:一个表中table1有两个班,table2中有老师的信息,查找table2中老师所教的班级中有几个学生。
select count(name) from table1,table2 where table1.class = table2.class and table2.class = 'c++’;
练习2:我想在这个关联的表中查找一个老师名为王军班里年龄最大的学生的姓名。
select name from table1,table2 where table1.class = table2.class and table2.teachr = '王军' and age = (select max(age) from table1,table2 where table1.class = table2.class and table2.teacher = '王军');
修改数据语句:
UPDATE TABLENAME SET CAL1 = VAL1,CAL2 = VAL2,....;
UPDATE TABLENAME SET CAL1 = VAL1,CAL2 = VAL2,.... WHERE CONDITIONAL;
如:update table1 set age = 25 where age > 30;
update table1 set age = 30 where name = '张三';
删除数据语句:
DELETE FROM TBALENAME WHERE CONDITIONAL;
WHERE 字句指定删除的行,若没有WHERE 字句代表删除所有行。
如:delete from table1 where name = '张三';