我强烈建议您使用 SQL JOINS。学习一次,终生使用。
SELECT c.*
FROM class AS c
INNER JOIN professor AS p
ON (c.profId = p.profId)
WHERE p.lname LIKE 'Smith';
给你的一些读物:
SQL 加入
数据库规范化
[更新]
送给你的小礼物:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
DROP SCHEMA IF EXISTS `school` ;
CREATE SCHEMA IF NOT EXISTS `school` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `school` ;
-- -----------------------------------------------------
-- Table `school`.`professor`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `school`.`professor` (
`professorId` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`lname` VARCHAR(40) NOT NULL ,
`fname` VARCHAR(40) NOT NULL ,
PRIMARY KEY (`professorId`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `school`.`semester`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `school`.`semester` (
`semesterId` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(8) NOT NULL ,
PRIMARY KEY (`semesterId`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `school`.`course`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `school`.`course` (
`courseId` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`code` VARCHAR(10) NOT NULL ,
`name` VARCHAR(40) NOT NULL ,
PRIMARY KEY (`courseId`) ,
UNIQUE INDEX `code_UNIQUE` (`code` ASC) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `school`.`class`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `school`.`class` (
`classId` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`courseId` TINYINT UNSIGNED NOT NULL ,
`semesterId` TINYINT UNSIGNED NOT NULL ,
`profId` INT UNSIGNED NOT NULL ,
PRIMARY KEY (`classId`) ,
INDEX `fk_class_professor_idx` (`profId` ASC) ,
INDEX `fk_class_semester1_idx` (`semesterId` ASC) ,
INDEX `fk_class_course1_idx` (`courseId` ASC) ,
CONSTRAINT `fk_class_professor`
FOREIGN KEY (`profId` )
REFERENCES `school`.`professor` (`professorId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_class_semester1`
FOREIGN KEY (`semesterId` )
REFERENCES `school`.`semester` (`semesterId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_class_course1`
FOREIGN KEY (`courseId` )
REFERENCES `school`.`course` (`courseId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
USE `school` ;
-- -----------------------------------------------------
-- Placeholder table for view `school`.`class_details`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `school`.`class_details` (`class_id` INT, `course_id` INT, `course_code` INT, `course_name` INT, `semester_id` INT, `semester_name` INT, `prof_id` INT, `prof_fname` INT, `prof_lname` INT);
-- -----------------------------------------------------
-- View `school`.`class_details`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `school`.`class_details`;
USE `school`;
CREATE OR REPLACE VIEW `school`.`class_details` AS
SELECT
w.classId AS `class_id`,
w.courseId AS `course_id`,
x.`code` AS `course_code`,
x.`name` AS `course_name`,
w.semesterId AS `semester_id`,
y.`name` AS `semester_name`,
w.profId AS `prof_id`,
z.fname AS `prof_fname`,
z.lname AS `prof_lname`
FROM class AS w
INNER JOIN course AS x
ON (w.courseId = x.courseId)
INNER JOIN semester AS y
ON (w.semesterId = y.semesterId)
INNER JOIN professor AS z
ON (w.profId = z.professorId);
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
-- -----------------------------------------------------
-- Data for table `school`.`professor`
-- -----------------------------------------------------
START TRANSACTION;
USE `school`;
INSERT INTO `school`.`professor` (`professorId`, `lname`, `fname`) VALUES (1, 'Smith', 'Willard');
INSERT INTO `school`.`professor` (`professorId`, `lname`, `fname`) VALUES (2, 'Burton', 'Tim');
COMMIT;
-- -----------------------------------------------------
-- Data for table `school`.`semester`
-- -----------------------------------------------------
START TRANSACTION;
USE `school`;
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (1, '2011.1');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (2, '2011.2');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (3, '2012.1');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (4, '2012.2');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (5, '2013.1');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (6, '2013.2');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (7, '2014.1');
INSERT INTO `school`.`semester` (`semesterId`, `name`) VALUES (8, '2014.2');
COMMIT;
-- -----------------------------------------------------
-- Data for table `school`.`course`
-- -----------------------------------------------------
START TRANSACTION;
USE `school`;
INSERT INTO `school`.`course` (`courseId`, `code`, `name`) VALUES (1, 'CALC1', 'Calculus 1');
INSERT INTO `school`.`course` (`courseId`, `code`, `name`) VALUES (2, 'CALC2', 'Calculus 2');
INSERT INTO `school`.`course` (`courseId`, `code`, `name`) VALUES (3, 'PHYS1', 'Physics 1');
INSERT INTO `school`.`course` (`courseId`, `code`, `name`) VALUES (4, 'PHYS2', 'Physics 2');
COMMIT;
-- -----------------------------------------------------
-- Data for table `school`.`class`
-- -----------------------------------------------------
START TRANSACTION;
USE `school`;
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (1, 1, 3, 1);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (2, 2, 3, 1);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (3, 3, 3, 2);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (4, 4, 3, 2);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (5, 1, 4, 1);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (6, 2, 4, 1);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (7, 3, 4, 2);
INSERT INTO `school`.`class` (`classId`, `courseId`, `semesterId`, `profId`) VALUES (8, 4, 4, 2);
COMMIT;
SELECT * FROM class_details;
SELECT * FROM class_details WHERE prof_lname LIKE 'Smith';