1.SQL是结构化查询语言
2.SQLite支持大部分的SQL语句,作为一名程序员数据库相关开发是必备的技能.
3.CREATE TABLE 表名
4.CREATE DATABASE 数据库名
5.DROP TABLE 表名
6.DROP DATABASE 数据库名
7.数据库插入语句:有两种
INSERT INTO 表名 (列名) VALUES (列的值 )
INSERT INTO 表名 VALUES (所有列的值)
推荐使用第一种方法。
8.UPDATE 表名 SET 列名='值' WHERE 条件语句
9.DELETE FROM 表名 WHERE 条件语句
对数据库和表的删除用DROP
对数据的删除用DELETE
10.ALTER主要用来修改数据库和表
ALTER TABLE 表名 RENAME TO 要更改的表名
11.ALTER可以用来增加新的一列。
ALTER TABLE 表名 ADD 字段 字段类型
以下为SQL语句:创建了一个用户表和一个商品表,通过外键关联。
--创建数据库表
CREATE TABLE users(
pk_userid INTEGER PRIMARY KEY AUTOINCREMENT,
name varchar(20) ,
age INTEGER ,
sex varchar(20),
address TEXT ,
phone varchar(20)
)
--插入测试数据
INSERT INTO users (name,age,sex,address,phone) VALUES ('华盛顿将军',100,'男','弗吉尼亚','098');
INSERT INTO users (name,age,sex,address,phone) VALUES ('戈林',50,'男','德国','001');
INSERT INTO users (name,age,sex,address,phone) VALUES ('慈禧太后',100,'女','紫禁城','114');
INSERT INTO users (name,age,sex,address,phone) VALUES ('托马斯',100,'男','坦桑尼亚','003');
INSERT INTO users (name,age,sex,address,phone) VALUES ('海伦凯乐',100,'女','弗吉尼亚','678');
--修改表名
ALTER TABLE users_ RENAME TO users;
--添加新的一列,birthday
ALTER TABLE users ADD birthday DATE;
--为新的一列添加数据
UPDATE users SET birthday='2012-09-21' WHERE pk_userid=1;
UPDATE users SET birthday='1999-03-11' WHERE pk_userid=2;
UPDATE users SET birthday='1777-12-01' WHERE pk_userid=3;
UPDATE users SET birthday='1776-07-04' WHERE pk_userid=4;
UPDATE users SET birthday='1991-09-17' WHERE pk_userid=5;
--创建一个商品表
CREATE TABLE goods (
pk_gid INTEGER PRIMARY KEY AUTOINCREMENT,
fk_userid INTEGER,
price INTEGER ,
g_name TEXT,
FOREIGN KEY (fk_userid) REFERENCES users (pk_userid)
)
--插入测试数据
INSERT INTO goods (fk_userid,price,g_name) VALUES (1,350,'蚕丝被');
INSERT INTO goods (fk_userid,price,g_name) VALUES (1,234,'棉被');
INSERT INTO goods (fk_userid,price,g_name) VALUES (2,432,'沙发');
INSERT INTO goods (fk_userid,price,g_name) VALUES (2,123,'被套');
INSERT INTO goods (fk_userid,price,g_name) VALUES (4,321,'床头柜');
INSERT INTO goods (fk_userid,price,g_name) VALUES (5,654,'音箱');
--查询戈林的手机号码和买的商品信息
SELECT u.name,g.price,g.g_name FROM users u ,goods g WHERE u.name='戈林' AND u.pk_userid=g.fk_userid;
SELECT 查询:
过滤重复数据:
条件语句用到的运算符:
AND 和OR :
ORDER BY 对查询结果进行排序:
升序排列:ORDER BY 字段名 ASC
降序排列:ORDER BY 字段名 DESC
当然也可以同时对多列进行排序:当排序的第一个条件相同的时候,就会根据第二个条件进行排序
SELECT * FROM subjects ORDER BY name,studyDate DESC ;
综合性练习:
--创建成绩表
CREATE TABLE results (
pk_stuid INTEGER PRIMARY KEY AUTOINCREMENT,
name varchar(20),
sex varchar(20),
class INTEGER,
english INTEGER,
chinese INTEGER
)
--插入5条数据
INSERT INTO results (name,sex,class,english,chinese) VALUES ('小强','男',1,92,90);
INSERT INTO results (name,sex,class,english,chinese) VALUES ('春哥','女',1,68,59);
INSERT INTO results (name,sex,class,english,chinese) VALUES ('娜娜','女',1,89,94);
INSERT INTO results (name,sex,class,english,chinese) VALUES ('大奎','男',2,43,58);
INSERT INTO results (name,sex,class,english,chinese) VALUES ('班花','女',2,96,84);
--查询所有数据,结果按照英语成绩升序排列
SELECT * FROM results ORDER BY english ASC;
--查询所有男生的姓名,性别,班级,英语,语文成绩
SELECT name,sex,class,english,chinese FROM results WHERE sex='男';
--查询所有一班的女生的姓名,英语,语文成绩
SELECT name,english,chinese FROM results WHERE sex='女' AND class=1;
--查询英语或语文成绩不及格的学生的姓名,性别,班级,英语,语文成绩
SELECT name,sex,class,english,chinese FROM results WHERE english<60 OR chinese <60;
--查询一班英语成绩和语文成绩都大于85分的所有女生的姓名,英语,语文成绩
SELECT name,english,chinese FROM results WHERE english>85 AND chinese>85 AND sex='女';
--查询所有英语成绩在60分到90分之间的所有学生的姓名,性别,班级,英语语文成绩,结果按照语文成绩降序排列
SELECT name,sex,class,english,chinese FROM results WHERE english BETWEEN 60 AND 90 ORDER BY chinese DESC;
COUNT & AVG:
COUNT 用来得到记录的个数
COUNT(*)
COUNT(列名)
AVG得到平均值
AVG(列名)
SUM & MAX & MIN:
SUM(列名) 得到指定列的和
MAX(列名) 得到指定列的最大值
MIN(列名) 得到指定列最小值
综合练习:
--创建一个teacher表
CREATE TABLE teacher(
pk_tid INTEGER PRIMARY KEY AUTOINCREMENT,
name varchar(20),
age INTEGER,
sex varchar(20),
subject varchar(20),
workTime INTEGER ,
salary INTEGER
)
--向表中插入数据
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('张天师',5000,'男','道法',4000,5500);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('唐僧',1000,'男','念佛',800,1200);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('孔子',1200,'男','教书',1000,7000);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('乔峰',1500,'男','做帮主',1300,8000);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('段誉',1400,'男','谈恋爱',1100,1500);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('如来',6000,'男','出谜语',5500,1600);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('欧阳锋',1700,'男','装蛤蟆',1500,4000);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('郭靖',1650,'男','降龙',4000,6000);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('李世民',1100,'男','做皇上',1000,5000);
INSERT INTO teacher (name,age,sex,subject,workTime,salary) VALUES ('洪七公',1750,'男','打狗',1700,5300);
--查询住这些人的平均年龄,平均工资
SELECT AVG(age) '平均年龄',AVG(salary) '平均工资' FROM teacher;
--查询出最高的工资
SELECT MAX(salary) '最高工资' FROM teacher;
--查询工作时间最短
SELECT MIN(workTime) '最短工作时间' FROM teacher;
--查询年龄最大人的所有信息
SELECT * FROM teacher WHERE age=(SELECT MAX(age) FROM teacher);
--查询工资最少人的所有信息
SELECT * FROM teacher WHERE salary=(SELECT MIN(salary) FROM teacher);
--查询年龄在1500-6000之间所有人的信息,结果按年龄降序排列
SELECT * FROM teacher WHERE age BETWEEN 1500 AND 6000 ORDER BY age DESC;